このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
ヒント
K個の互いに排他的なクラスの交差エントロピ損失を含む分類出力層を構築するには,classificationLayer
を使用します。分類問題に別の損失関数を使用する場合は,この例を指針として使用してカスタム分類出力層を定義できます。
この例では,残差平方和(SSE)損失を含むカスタム分類出力層を定義し,畳み込みニューラルネットワークで使用する方法を説明します。
カスタム分類出力層を定義するために,この例で提供するテンプレ,トを使用できます。この例では,次のステップで説明を進めます。
層の命名- matlab®で使用できるように層に名前を付けます。
層のプロパティの宣言-層のプロパティを指定します。
コンストラクタ関数の作成(オプション)—層の構築とそのプロパティ初期化の方法を指定します。コンストラクタ,関数を指定しない場合,プロパティは作成時に”
で初期化されます。
順方向損失関数の作成-予測と学習タゲットの間の損失を指定します。
逆方向損失関数の作成(オプション)—予測にいての損失の微分を指定します。逆方向損失関数を指定しない場合,順方向損失関数はdlarray
オブジェクトをサポ,トしなければなりません。
分類sse層は,分類問題の残差平方和損失を計算します。Sseは,2の連続確率変数間の誤差測定です。予測yと学習タ,ゲットtにいて,yとtの間のsse損失は次で与えられます。
ここでnは観測値の数kはクラスの数です。
分類出力層のテンプレトをmatlabの新しいファルにコピします。このテンプレ,トは,分類出力層の構造の概要を示しており,層の動作を定義する関数が含まれます。
classdefmyClassificationLayer < nnet.layer.ClassificationLayer属性%(可选)图层属性。图层属性在这里。结束方法函数层= myClassificationLayer()(可选)创建myClassificationLayer。%层构造函数在这里。结束函数损失(层,Y, T)返回预测Y和训练之间的损失%目标T。%%的输入:% layer -输出层% Y -网络预测培训目标%%输出:%损失- Y和T之间的损失%层正向损失函数在这里。结束函数dLdY = backwardLoss(layer, Y, T)%(可选)反向传播损失的导数%的功能。%%的输入:% layer -输出层% Y -网络预测培训目标%%输出:% dLdY -损失对%预测Y%层反向损失函数在这里。结束结束结束
まず,層に名前を付けます。クラスファesc escルの最初の行で,既存の名前myClassificationLayer
をsseClassificationLayer
に置き換えます。
classdefssecassificationlayer < nnet.layer.ClassificationLayer...结束
次に,コンストラクタ,関数myClassificationLayer
(方法
セクションの最初の関数)の名前を層と同じ名前に変更します。
方法函数layer = ssecassificationlayer()…结束...结束
層のクラスファ@ @ルをsseClassificationLayer.m
という名前の新しいファ@ @ルに保存します。このファ@ @ル名は層の名前に一致しなければなりません。この層を使用するには,このファイルを現在のフォルダーまたはMATLABパス上のフォルダーに保存しなければなりません。
層のプロパティを属性
セクションで宣言します。
既定では,カスタム出力層には次のプロパティがあります。
的名字
- - - - - -層の名前。文字ベクトルまたは字符串スカラ,として指定します。層グラフに層を含めるには,層に空ではない一意の名前を指定しなければなりません。この層が含まれる系列ネットワ,クに学習させて的名字
を”
に設定すると,学習時に層に名前が自動的に割り当てられます。
描述
—層に層にいての1行の説明。文字ベクトルまたは字符串スカラ,として指定します。この説明は,層が层
配列に表示されるときに表示されます。層の説明を指定しない場合,“分类输出”
または“回归输出”
が表示されます。
类型
-層のタie浏览器プ。文字ベクトルまたは字符串スカラ,として指定します。类型
の値は,層が层
配列に表示されるときに表示されます。層のタイプを指定しない場合、層のクラス名が表示されます。
カスタム分類層には次のプロパティもあります。
类
- - - - - -出力層のクラス。分类ベクトル,字符串配列,文字ベクトルの单元格配列,または“汽车”
として指定します。类
が“汽车”
の場合,学習時にクラスが自動的に設定されます。str我ng 配列または文字ベクトルの cell 配列str
を指定すると,出力層のクラスが分类(str, str)
に設定されます。
カスタム回帰層には次のプロパティもあります。
ResponseNames
- - - - - -応答の名前。文字ベクトルのcell配列または字符串配列として指定します。学習時に,学習デ,タに従って応答名が自動的に設定されます。既定値は{}
です。
層にその他のプロパティがない場合は,属性
セクションを省略できます。
この例の層には追加のプロパティが必要ないため,属性
セクションは削除できます。
層を構築する関数を作成し,層のプロパティを初期化します。層を作成するために必要な変数をコンストラクタ,関数への入力として指定します。
作成時に的名字
プロパティに割り当てる入力引数的名字
を指定します。関数の構文を説明するコメントを関数の上部に追加します。
函数layer = ssecassificationlayer (name)% layer = ssecassificationlayer (name)创建一个平方和%错误分类层,并指定层名。...结束
コメント%层构造函数在这里
を,層のプロパティを初期化するコ,ドに置き換えます。
層の描述
プロパティを設定して,層に1行の説明を指定します。的名字
プロパティを入力引数的名字
に設定します。
函数layer = ssecassificationlayer (name)% layer = ssecassificationlayer (name)创建一个平方和%错误分类层,并指定层名。设置层名。层。的名字=的名字;设置层描述。层。描述=平方和误差;结束
ネットワ,クで行った予測と学習タ,ゲットの間の,sse損失を返す,forwardLoss
という名前の関数を作成します。forwardLoss
の構文は损失(层,Y, T)
です。ここで,Y
は前の層の出力であり,T
は学習タ,ゲットを表します。
分類問題の場合,T
の次元は問題のタ@ @プによって異なります。
分類タスク | 入力サ@ @ズ | 観察値の次元 |
---|---|---|
2次元 | 1 × 1 × K × N。ここで,Kはクラスの数,Nは観測値の数です。 | 4 |
3次元 | 1 × 1 × 1 × K × N。ここで,Kはクラスの数,Nは観測値の数です。 | 5 |
从序列到标签分類 | K行n列。Kはクラスの数,Nは観測値の数です。 | 2 |
序列对序列分類 | kxnxs。ここで,Kはクラス数、N は観測値の数、S はシーケンス長です。 | 2 |
Y
のサ@ @ズは前の層の出力によって異なります。Y
がT
と同じサaapl . exeズになるように,正しいサaapl . exeズを出力する層を出力層の前に含めなければなりません。たとえば,Y
を必ずK個のクラスの予測スコアを持つ4次元配列にするために,サイズがKの全結合層を含め,その後にソフトマックス層,出力層の順に配置することができます。
分類sse層は,分類問題の残差平方和損失を計算します。Sseは,2の連続確率変数間の誤差測定です。予測yと学習タ,ゲットtにいて,yとtの間のsse損失は次で与えられます。
ここでnは観測値の数kはクラスの数です。
入力Y
およびT
は,この方程式のyおよびtにそれぞれ対応しています。出力损失
はlに対応します。関数の構文を説明するコメントを関数の上部に追加します。
函数损失(层,Y, T)% loss = forwardLoss(layer, Y, T)返回之间的SSE损失预测Y和训练目标T。计算平方和。sumSquares = sum((Y-T).^2);对小批量取平均值。N = size(Y,4);损失= sum(sumSquares)/N;结束
関数forwardLoss
はdlarray
オブジェクトをサポ,トする関数のみを使用するため,関数backwardLoss
の定義はオプションです。dlarray
オブジェクトをサポトしている関数の一覧にいては,Dlarrayをサポ,トする関数の一覧を参照してください。
完成した分類出力層のクラスファ@ @ルを表示します。
classdefssecassificationlayer < nnet.layer.ClassificationLayer示例自定义分类层的平方和误差损失。方法函数layer = ssecassificationlayer (name)% layer = ssecassificationlayer (name)创建一个平方和%错误分类层,并指定层名。设置层名。层。的名字=的名字;设置层描述。层。描述=平方和误差;结束函数损失(层,Y, T)% loss = forwardLoss(layer, Y, T)返回之间的SSE损失预测Y和训练目标T。计算平方和。sumSquares = sum((Y-T).^2);对小批量取平均值。N = size(Y,4);损失= sum(sumSquares)/N;结束结束结束
層の順方向関数がdlarray
オブジェクトを完全にサポ,トしている場合,層は,gpu互換です。そうでない場合,gpu互換にするには,層関数が入力をサポ,トし,gpuArray
(并行计算工具箱)型の出力を返さなければなりません。
多くのmatlab組み込み関数が入力引数gpuArray
(并行计算工具箱)およびdlarray
をサポ,トしています。dlarray
オブジェクトをサポトしている関数の一覧にいては,Dlarrayをサポ,トする関数の一覧を参照してください。Gpuで実行される関数の一覧にいては,Gpuでのmatlab関数の実行(并行计算工具箱)を参照してください。深層学習にgpuを使用するには,サポトされているgpuデバスもなければなりません。サポトされているデバスにいては,リリス別のgpuサポト(并行计算工具箱)を参照してください。Matlabでのgpuの使用の詳細は,Matlabでのgpu計算(并行计算工具箱)を参照してください。
forwardLoss
で使用するmatlab関数はすべて,dlarray
オブジェクトをサポ,トしているため,層は,gpu互換です。
カスタム分類出力層sseClassificationLayer
にいて層の有効性をチェックします。
カスタム残差平方和分類層を定義します。この層を作成するには,ファsseClassificationLayer.m
を現在のフォルダ,に保存します。層の@ @ンスタンスを作成します。
层= ssecassificationlayer (上交所的);
checkLayer
を使用して層が有効であることをチェックします。層への典型的な入力における1の観測値のサズになるように有効な入力サズを指定します。層には1 x 1 xKxNの配列を入力する必要があります。Kはクラスの数,Nはミニバッチ内の観測値の数です。
validInputSize = [1 1 10];validInputSize checkLayer(层,“ObservationDimension”4);
跳过GPU测试。没有找到兼容的GPU设备。跳过代码生成兼容性测试。要检查代码生成层的有效性,请指定'CheckCodegenCompatibility'和'ObservationDimension'选项。运行nnet.checklayer.TestOutputLayerWithoutBackward ........完成nnet.checklayer.TestOutputLayerWithoutBackward __________测试总结:8通过,0失败,0不完整,2跳过。时间流逝:0.31268秒。
テストの概要では,パスしたテスト,失敗したテスト,不完全なテスト,およびスキップされたテストの数が報告されます。
深度学习工具箱では,カスタム出力層を他の出力層と同じように使用できます。この節では,前に作成したカスタム分類出力層を使用して分類用のネットワークを作成し,学習を行う方法を説明します。
例の学習デ,タを読み込みます。
[XTrain,YTrain] = digitTrain4DArrayData;
カスタム残差平方和分類層を定義します。この層を作成するには,ファsseClassificationLayer.m
を現在のフォルダ,に保存します。層の@ @ンスタンスを作成します。カスタム分類出力層sseClassificationLayer
を含む層配列を作成します。
layers = [imageInputLayer([28 28 1]) convolution2dLayer(5,20) batchNormalizationLayer reluLayer fullyConnectedLayer(10) softmaxLayer ssecassificationlayer (上交所的)]
2 " Convolution 20 5x5 convolutions with stride [1 1] and padding [0 0 0 0 0] 3 " Batch normalization Batch normalization 4 " ReLU ReLU 5 " Fully Connected 10 Fully Connected Layer 6 " Softmax Softmax 7 'sse' Classification Output平方和误差
学習オプションを設定し,ネットワ,クに学習させます。
选项= trainingOptions(“个”);net = trainNetwork(XTrain,YTrain,图层,选项);
单CPU训练。初始化输入数据规范化。|========================================================================================| | 时代| |迭代时间| Mini-batch | Mini-batch |基地学习 | | | | ( hh: mm: ss) | | |丧失准确性 | |========================================================================================| | 1 | 1 |就是9.38% | | 0.9944 | 0.0100 | | 2 | 50 | 00:00:04 | 75.00% | 0.3561 | 0.0100 | | 3 | 100 | 00:00:07 | 92.97% | 0.1316 | 0.0100 | | 150 | | 00:00:11 | 96.88% | 0.0915 | 0.0100 ||6 | 200 | 00:00:15 | 95.31% | 0.0738 | 0.0100 | | 7 | 250 | 00:00:18 | 96.88% | 0.0485 | 0.0100 | | 8 | 300 | 00:00:22 | 99.22% | 0.0203 | 0.0100 | | 9 | 350 | 00:00:26 | 99.22% | 0.0264 | 0.0100 | | 11 | 400 | 00:00:30 | 100.00% | 0.0069 | 0.0100 | | 12 | 450 | 00:00:35 | 100.00% | 0.0045 | 0.0100 | | 13 | 500 | 00:00:40 | 100.00% | 0.0078 | 0.0100 | | 15 | 550 | 00:00:46 | 100.00% | 0.0059 | 0.0100 | | 16 | 600 | 00:00:49 | 100.00% | 0.0021 | 0.0100 | | 17 | 650 | 00:00:53 | 100.00% | 0.0040 | 0.0100 | | 18 | 700 | 00:00:57 | 100.00% | 0.0024 | 0.0100 | | 20 | 750 | 00:01:01 | 100.00% | 0.0028 | 0.0100 | | 21 | 800 | 00:01:05 | 100.00% | 0.0020 | 0.0100 | | 22 | 850 | 00:01:09 | 100.00% | 0.0017 | 0.0100 | | 24 | 900 | 00:01:12 | 100.00% | 0.0020 | 0.0100 | | 25 | 950 | 00:01:16 | 100.00% | 0.0013 | 0.0100 | | 26 | 1000 | 00:01:20 | 100.00% | 0.0012 | 0.0100 | | 27 | 1050 | 00:01:25 | 99.22% | 0.0104 | 0.0100 | | 29 | 1100 | 00:01:31 | 100.00% | 0.0013 | 0.0100 | | 30 | 1150 | 00:01:37 | 100.00% | 0.0012 | 0.0100 | | 30 | 1170 | 00:01:39 | 99.22% | 0.0077 | 0.0100 | |========================================================================================|
新しいデタにいて予測を行い,精度を計算することによって,ネットワク性能を評価します。
[XTest,YTest] = digitTest4DArrayData;YPred = category (net, XTest);accuracy = mean(YTest == YPred)
准确度= 0.9844
classificationLayer
|checkLayer
|assembleNetwork