主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

カスタム深層学習層の定義

ヒント

このトピックでは,問題に合わせてカスタム深層学習層を定義する方法を説明します。深度学习工具箱™ に組み込まれている層の一覧については、深層学習層の一覧を参照してください。

このトピックでは,深層学習層のアーキテクチャと,問題に使用するカスタム層を定義する方法を説明します。

説明

カスタム深层学习层を定义し,オプションの学习可能なパラメーターを指定します。

学習可能なパラメーターを含むカスタム層の定義方法の例については,学习可能なパラメーター含むカスタム深层习层ののを参照してください。複数の入力があるカスタム層の定義方法を示す例については,複数の入力があるカスタム深層学習層の定義を参照してください。

分類出力層

カスタム分類出力層を定義し,損失関数を指定します。

カスタム分類出力層を定義し,損失関数を指定する方法を示す例については,カスタム分类类力层の定义を参照してください。

回帰出力層

カスタム回帰出力層を定義し,損失関数を指定します。

カスタム回帰出力層を定義し,損失関数を指定する方法を示す例については,カスタム回帰出力層の定義を参照してください。

層テンプレート

以下のテンプレートを使用して,新しい層を定義できます。

中間層テンプレート

分類出力層テンプレート

回帰出力層テンプレート

中间层の

学習時には,ネットワークのフォワードパスとバックワードパスが反復して実行されます。

ネットワークのフォワードパスを行う場合,各層は前の層の出力を取り,関数を適用し,結果を次の層に出力(順伝播)します。

層は複数の入力または出力を持つことができます。たとえば,層は複数の前の層からX1X、…nを取り,出力Z1Z,…を次の層に順伝播できます。

ネットワークのフォワードパスの最後に,出力層は予測Yと真のターゲットTの間の損失Lを計算します。

ネットワークのバックワードパスでは,それぞれの層は,層の出力についての損失の微分を取り,入力についての損失Lの微分を計算し,その結果を逆伝播します。層に学習可能なパラメーターがある場合,層は層の重み(学習可能なパラメーター)の微分も計算します。層は,重みの微分を使用して学習可能なパラメーターを更新します。

次の図は,深層ニューラルネットワークにおけるデータのフローを説明するもので,1つの入力X 1つの出力Z,および学習可能なパラメーターWがある層経由のデータフローを強調しています。

中間層のプロパティ

层のプロパティはクラス定义の属性セクションで宣言します。

既定では,カスタム中間層に次のプロパティがあります。

财产 説明
的名字 層の名前。文字ベクトルまたは字符串スカラーとして指定します。層グラフに層を含めるには、層に空ではない一意の名前を指定しなければなりません。この層が含まれる系列ネットワークに学習させて的名字''に設定すると,学習時に層に名前が自動的に割り当てられます。
描述

層についての1行の説明。文字ベクトルまたは字符串スカラーとして指定します。この説明は,層が配列に表示されるときに表示されます。層の説明を指定しない場合,層のクラス名が表示されます。

类型 層のタイプ。文字ベクトルまたは字符串スカラーとして指定します。类型の値は,层が配列に表示されるときに表示されます。層のタイプを指定しない場合、層のクラス名が表示されます。
NumInputs 層の入力の数。正の整数として指定します。この値を指定しない場合,NumInputsInputNamesの定定はははははに前前前ははれは。
InputNames 層の入力の名前。文字ベクトルの细胞配列として指定します。この値を指定せず,NumInputsが1より大きい場合,InputNames{“三机”,…,“客栈”}に自動的に設定されます。ここで,NNumInputsです。既定値は{'在'}です。
NumOutputs 層の出力の数。正の整数として指定します。この値を指定しない場合,NumOutputs输出名称の定定はははははに前前前ははれは。
输出名称 層の出力の名前。文字ベクトルの细胞配列として指定します。この値を指定せず,NumOutputsが1より大きい場合,输出名称{着干活,…,“outM”}に自動的に設定されます。ここで,NumOutputsです。既定値は{“出”}です。

層にその他のプロパティがない場合は,属性セクションを省略できます。

ヒント

複数の入力がある層を作成する場合,層のコンストラクターでNumInputsInputNamesのいずれかのプロパティを設定しなければなりません。複数の出力がある層を作成している場合,層のコンストラクターでNumOutputs输出名称のいずれかのプロパティを設定しなければなりません。例については,複数の入力があるカスタム深層学習層の定義を参照してください。

学习可なパラメーター

層の学習可能なパラメーターはクラス定義の属性(学习)セクションで宣言します。学习可なパラメーターとして、数値配列またはdlnetworkオブジェクトを指定できます。層に学習可能なパラメーターがない場合は、属性(学习)セクションを省略できます。

オプションで,学院可ななパラメーター习习系数号l2既定既定を指定でき。1に設定されています。

組み込みの層とカスタム層のどちらの場合も,以下の関数を使用して,学習率係数とL2正則化係数を設定および取得できます。

関数 説明
setLearnRateFactor 学習可能なパラメーターの学習率係数を設定します。
setL2Factor 学习可能能なパラメーターL2正则化学数号を设定し。
getLearnRateFactor 学習可能なパラメーターの学習率係数を取得します。
getL2Factor 学習可能なパラメーターのL2正則化係数を取得します。

学習可能なパラメーターの学習率係数およびL2係数を指定するには,構文层= setLearnRateFactor(层、“MyParameterName”值)および层= setL2Factor(层、parameterName值)をそれぞれ使用します。

学習可能なパラメーターの学習率係数およびL2係数の値を取得するには,構文getLearnRateFactor(层,“MyParameterName”)およびparameterName getL2Factor(层)をそれぞれ使用します。

たとえば,この構文は,“α”という名前の学習可能なパラメーターの学習率係数を0.1に設定します。

一层一层= setLearnRateFactor (,“α”, 0.1);

順方向関数

层によっては学习时と予测时表动作2结合有关部预测向前のいずれかを使用します。フォワードパスが予測時に発生する場合,層は関数预测を使用します。フォワードパスが学習時に発生する場合,層は関数向前を使用します。予測時と学習時で異なる 2 つの関数を必要としない場合は、関数向前を省略できます。この場合,学習時に層は预测を使用します。

関数向前およびカスタム逆方向関数を定義する場合,逆伝播時に使用できる引数内存に値を割り当てなければなりません。

预测の構文は(Z1,…,Zm评选)=预测(层,X1,…,Xn)です。ここで,X1,…,Xnn個の層入力,Z1,…,Zm评选个个の层力です。値nおよびは,层のNumInputsプロパティおよびNumOutputsプロパティに対応しなければなりません。

ヒント

预测への入力の数が変化する可能性がある場合,X1,…,Xnではなく变长度输入宗量を使用します。この場合,变长度输入宗量は入力の细胞配列です。ここで,变长度输入宗量{我}西に対応します。出力の数が変化する可能性がある場合、Z1,…,Zm评选ではなくvarargoutを使用します。この場合,varargoutは出力の细胞配列です。ここで,varargout {j}Zjに対応します。

ヒント

学習可能なパラメーターのdlnetworkオブジェクトがカスタム層にある場合,カスタム層の関数预测内で,dlnetworkの関数预测を使用します。dlnetworkオブジェクトの关节预测を使用すると,ソフトウェアは必ず適切な層処理を選択して予測を行います。

向前の構文は(Z1,…,Zm评选、内存)=前进(层,X1,…,Xn)です。ここで,X1,…,Xnn個の層入力,Z1,…,Zm评选個の層出力,内存は層のメモリです。

ヒント

向前への入力の数が変化する可能性がある場合,X1,…,Xnではなく变长度输入宗量を使用します。この場合,变长度输入宗量は入力の细胞配列です。ここで,变长度输入宗量{我}西に対応します。出力の数が変化する可能性がある場合、Z1,…,Zm评选ではなくvarargoutを使用します。この場合,varargoutは出力の细胞配列です。ここで,j= 1,......,NumOutputsについてvarargout {j}Zjに対応し,varargout {NumOutputs + 1}内存に対応します。

ヒント

学習可能なパラメーターのdlnetworkオブジェクトがカスタム層にある場合,カスタム層の関数向前内で,dlnetworkオブジェクトの关节向前を使用します。dlnetworkオブジェクトの关节向前を使用すると,ソフトウェアは必ず適切な層処理を選択して学習を行います。

入力の次元は,データのタイプと結合層の出力によって異なります。

層入力 入力サイズ 観察値の次元
2次元イメージ h x w x c x N。ここで,h、w、および c は、それぞれイメージの高さ、幅、およびチャネル数に対応します。N は観測値の数です。 4
3次元イメージ H x W X D X C XN.ここここ,H,H,W,D,およびCは,それぞれ3次元イメージ高,幅,深さ,およびおよび数に対応。 5
ベクトルシーケンス c x N x S。ここで,c はシーケンスの特徴の数、N は観測値の数、S はシーケンス長です。 2
2次元イメージシーケンス h x w x c x N x S。ここで,h、w、および c は、それぞれイメージの高さ、幅、およびチャネル数に対応します。N は観測値の数、S はシーケンス長です。 4
3次元イメージシーケンス H x w x dx x c xNx S。ここで、h、w、d、および c は、それぞれ 3 次元イメージの高さ、幅、深さ、およびチャネル数に対応します。N は観測値の数、S はシーケンス長です。 5

シーケンスを出力する層の場合,その層は,任意の長さのシーケンス,または時間次元をもたないデータを出力できます。関数trainNetworkを使用して,シーケンスを出力するネットワークに学習させる場合は,入力シーケンスと出力シーケンスの長さが一致していなければならない点に注意してください。

逆方向関数

層の逆方向関数は,入力データについての損失の微分を計算し,結果を前の層に出力(逆伝播)します。層に学習可能なパラメーター(層の重みなど)がある場合,落后的は学習可能なパラメーターの微分も計算します。関数trainNetworkを使用する場合,バックワードパスの間に,層は,これらの微分を使用して学習可能なパラメーターを自動的に更新します。

逆方向関数の定義はオプションです。逆方向関数を指定せず、層の順方向関数がdlarrayオブジェクトをサポートしている場合,自動微分を使用して逆方向関数が自動的に決定されます。dlarrayオブジェクトをサポートしている関数の一覧については,dlarrayをサポートする関数の一覧を参照してください。次のことを行う場合,カスタム逆方向関数を定義します。

  • 特定のアルゴリズムを使用して微分を計算する。

  • dlarrayオブジェクトをサポートしない順方向関数で演算を使用する。

学習可能なdlnetworkオブジェクトをもつカスタム層では,カスタム逆方向関数がサポートされていません。

カスタム逆方向関数を定義するには,落后的という名前の関数を作成します。

落后的の構文は[dLdX1,…,dLdXn, dLdW1,…,dLdWk] =向后(Z1,层,X1,…,Xn…,Zm评选,dLdZ1,…,dLdZm,内存)です。ここで,次のようになります。

  • X1,…,Xnn个の层入力

  • Z1,…,Zm评选は層の順方向関数の個の出力

  • dLdZ1,…,dLdZmは次の層から逆伝播された勾配

  • 向前が定義された場合,内存向前のメモリ出力。そうでない場合,内存[]

出力において,dLdX1,…,dLdXnは層入力についての損失の微分で,dLdW1,…,dLdWkk个の学习可なパラメーターについての损失ののです。フォワードフォワードパスとバックワードワードパスパスパスのに使れれないない変ががさことをを防いでメモリメモリ使をを防いでメモリ使使を削减するにはは使削减するににははを削减するにははに置き換えます。

ヒント

落后的への入力の数が変化する可能性がある場合,の後に入力引数ではなく变长度输入宗量を使用します。この場合,变长度输入宗量は入力の细胞配列です。ここで,= 1,…,NumInputsについて变长度输入宗量{我}西に対応し,j= 1,…,NumOutputsについて变长度输入宗量{NumInputs + j}および变长度输入宗量{NumInputs + NumOutputs + j}はそれぞれZjおよびdLdZjに対応し,变长度输入宗量{结束}内存に対応します。

出力の数が変化する可能性がある場合,出力引数ではなくvarargoutを使用します。この場合,varargoutは出力の细胞配列です。ここで,= 1,…,NumInputsについてvarargout{我}dLdXit= 1,…,kについてvarargout {NumInputs + t}dLdWtに対応します。kは学習可能なパラメーターの数です。

X1,…,XnZ1,…,Zm评选の値は順方向関数の場合と同じです。dLdZ1,…,dLdZmの次元は,それぞれZ1,…,Zm评选の次元と同じです。

dLdX1,…,dLdxnの次元およびデータ型は,それぞれX1,…,Xnの次元およびデータ型と同じです。dLdW1、……dLdWkの次元およびデータ型は,それぞれW1、……の次元およびデータ型と同じです。

损失の分の计算は次次次の连锁律ができできでき。

l X j l Z j Z j X

l W j l Z j Z j W

関数trainNetworkを使用する場合,バックワードパスの間に,層は,微分dLdW1、……dLdWkを使用して学習可能なパラメーターを自動的に更新します。

カスタム逆方向関数の定義方法を示す例については,カスタム層の逆方向関数の指定を参照してください。

GPU互換性

層の順方向関数がdlarrayオブジェクトを完全にサポートしている場合,層はGPU互換です。そうでない場合,GPU互換にするには,層関数が入力をサポートし,gpuArray(并行计算工具箱)型の出力を返さなければなりません。

多くのMATLAB®組み込み関数が入力引数gpuArray(并行计算工具箱)およびdlarrayをサポートしています。dlarrayオブジェクトをサポートしている関数の一覧については,dlarrayをサポートする関数の一覧を参照してください。GPUで実行される関数の一覧については,GPUでのMATLAB関数の実行(并行计算工具箱)を参照してください。深层学习にgpuをををには,サポートされているgpuデバイスデバイスもなければばませませんんんれれいるについてについてははは。リリース别のgpuサポート(并行计算工具箱)を参照してください。MATLABでのGPUの使用の詳細は,MATLABでのGPU計算(并行计算工具箱)を参照してください。

コード生成の互換性

コード生成をサポートするカスタム層を作成するには,次のことが必要です。

  • 層は層の定義でプラグマ% # codegenを指定しなければなりません。

  • 预测の入力は次のようになっていなければなりません。

    • 次元が一致している。各入力の次元の数が同じでなければなりません。

    • バッチサイズが一致している。各入力のバッチサイズが同じでなければなりません。

  • 预测の出力の次元とバッチサイズが層の入力と一致していなければなりません。

  • 非スカラーのプロパティは,单配列,双配列,または文字配列でなければなりません。

  • スカラーのプロパティは,数値型、逻辑型、または字符串型でなければなりません。

コード生成でで,2次元イメージ入力のみで中间层がサポートされ。

コード生成をサポートするカスタム層を作成する方法を示す例については,コード生成用のカスタム深層学習層の定義を参照してください。

ネットワーク構成

それ自体が層グラフを定義するカスタム層を作成するには,学習可能なパラメーターとしてdlnetworkオブジェクトを指定できます。このこの法は“ネットワーク構成“と呼ばれます。以下の場合にネットワーク構成を使用できます。

  • 学習可能な層のブロックを表す単一のカスタム層(残差ブロックなど)の作成。

  • コントロールフローをもつネットワーク(入力データに応じて動的に変更できるセクションをもつネットワークなど)の作成。

  • ループをもつネットワーク(自分自身に出力をフィードバックするセクションをもつネットワークなど)の作成。

層の有効性のチェック

カスタム深層学習層を作成する場合,関数checkLayerを使用して,層が有効であることをチェックできます。この関数は,層について,有効性,GPU互換性,勾配定義の正しさ,コード生成の互換性をチェックします。層が有効であることをチェックするには,次のコマンドを実行します。

checkLayer(层、validInputSize ObservationDimension,昏暗的)
ここで,は層のインスタンス,validInputSizeは層に有効な入力サイズを指定するベクトルまたは细胞配列であり,昏暗的は层の入力データにおける観测値の次元を指定します。入力サイズが大きい場合,勾配チェックの実行に時間がかかります。テストを高速化するには,指定する有効な入力サイズを小さくします。

详细については,カスタム層の有効性のチェックを参照してください。

checkLayerを使用した層の有効性のチェック

カスタム層preluLayerについて層の有効性をチェックします。

カスタムPReLU層を定義します。この層を作成するには,ファイルpreluLayer.mを現在のフォルダーに保存します。

層のインスタンスを作成し,checkLayerを使用してその有効性をチェックします。層への典型的な入力における 1 つの観測値のサイズになるように有効な入力サイズを指定します。層には 4 次元配列を入力する必要があり、最初の 3 つの次元は前の層の出力における高さ、幅、およびチャネル数に対応し、4 番目の次元は観測値に対応します。

観測値の入力の典型的なサイズを指定し,“ObservationDimension”を4に設定します。

层= preluLayer (20,“prelu”);validInputSize = [24 24 20];validInputSize checkLayer(层,“ObservationDimension”4)
跳过GPU测试。没有找到兼容的GPU设备。跳过代码生成兼容性测试。要检查代码生成层的有效性,请指定“CheckCodegenCompatibility”和“ObservationDimension”选项。运行nnet.checklayer.TestLayerWithoutBackward .......... ...完成nnet.checklayer.TestLayerWithoutBackward __________测试摘要:13通过,0失败,0不完整,9跳过。时间:0.15555秒。

ここでは,関数で層に関する問題はまったく検出されていません。

ネットワークに层を含める

深度学习工具箱では,カスタム层を他の层同じようようよう使使ます。

カスタムPReLU層を定義します。この層を作成するには,ファイルpreluLayer.mを現在のフォルダーに保存します。

カスタム層preluLayerを含む層配列を作成します。

[imageInputLayer([28 28 1])卷积2dlayer (5,20) batchNormalizationLayer preluLayer(20, 20)“prelu”) fulllyconnectedlayer (10) softmaxLayer classificationLayer;

出力層のアーキテクチャ

学習時のフォワードパスの最後で,出力層は前の層の予測(出力)yを取り,これらの予測と学習ターゲットの間の損失Lを計算します。出力層は,予測yについて損失Lの微分を計算し,結果を前の層に出力(逆伝播)します。

次の図は,畳み込みニューラルネットワークおよび出力層におけるデータのフローを示しています。

出力層のプロパティ

层のプロパティはクラス定义の属性セクションで宣言します。

既定では,カスタム出力層には次のプロパティがあります。

  • 的名字- - - - - -層の名前。文字ベクトルまたは字符串スカラーとして指定します。層グラフに層を含めるには、層に空ではない一意の名前を指定しなければなりません。この層が含まれる系列ネットワークに学習させて的名字''に設定すると,学習時に層に名前が自動的に割り当てられます。

  • 描述——層についての1行の説明。文字ベクトルまたは字符串スカラーとして指定します。この説明は,層が配列に表示されるときに表示されます。層の説明を指定しない場合,“分类输出”または“回归输出”が表示されます。

  • 类型——層のタイプ。文字ベクトルまたは字符串スカラーとして指定します。类型の値は,层が配列に表示されるときに表示されます。層のタイプを指定しない場合、層のクラス名が表示されます。

カスタム分類層には次のプロパティもあります。

  • - - - - - -出力層のクラス。直言ベクトル,弦配列,文字ベクトルの细胞配列,または“汽车”として指定します。“汽车”の場合,学習時にクラスが自動的に設定されます。str我ng 配列または文字ベクトルの cell 配列strを指定すると,出力層のクラスが分类(str, str)に設定されます。

カスタム回帰層には次のプロパティもあります。

  • ResponseNames- - - - - -応答の名前。文字ベクトルの细胞配列または字符串配列として指定します。学習時に,学習データに従って応答名が自動的に設定されます。既定値は{}です。

層にその他のプロパティがない場合は,属性セクションを省略できます。

損失関数

出力層は,順方向損失関数を使用して予測とターゲットの間の損失lを計算し,逆方向損失関数を使用して予測についての損失の微分を計算します。

forwardLossの構文は,loss = forwardLoss(layer, Y, T)です。入力Yは,ネットワークで行った予測に対応します。これらの予測は前の層の出力です。入力Tは学習ターゲットに対応します。出力损失は,指定された損失関数に従ったYTの間の損失です。出力损失はスカラーでなければなりません。

層の順方向損失関数がdlarrayオブジェクトをサポートしている場合,逆方向損失関数が自動的に決定されます。dlarrayオブジェクトをサポートしている関数の一覧については,dlarrayをサポートする関数の一覧を参照してください。または、カスタム逆方向損失関数を定義するには、backwardLossという名前の関数を作成します。カスタム逆方向損失関数の定義方法を示す例については,カスタム出力層の逆方向損失関数の指定を参照してください。

backwardLossの構文は,dLdY = backwardLoss(layer, Y, T)です。入力Yはネットワークで行った予測を含み,Tは学習ターゲットを含みます。出力dLdYは予測Yについての損失の微分です。出力dLdYは,層入力Yと同じサイズでなければなりません。

分享到问题の合,Tの次元は問題のタイプによって異なります。

分類タスク 入力サイズ 観察値の次元
2次元イメージ分類 1 x 1 x K x N。ここで,Kはクラスの数Nは観測値の数です。 4
3次元イメージ分類 1 x 1 x 1 x K x N。ここで,Kはクラスの数Nは観測値の数です。 5
sequence-to-label分類 K行N列。Kはクラスの数Nは観測値の数です。 2
sequence-to-sequence分類 k x n x s.ここここ,kはは数,nは観测値のです。 2

Yのサイズは前の層の出力によって異なります。YTと同じサイズになるように,正しいサイズを出力する層を出力層の前に含めなければなりません。たとえば,Yを必ずk个个のクラスクラス予测スコアを持つ持つに配列にするため,サイズkのの结にを,その后にマックス层,そのその后マックス层,出力层のに配置することができますことができことができ。

回帰问题の场合,Tの次元も問題のタイプによって異なります。

回帰タスク 入力サイズ 観察値の次元
2次元イメージ回帰 1 x 1 x R x N。ここで,R は応答の数、N は観測値の数です。 4
2¼图像到图像回帰 H x w x c xN。ここでh, w,およびcはそれぞれ出力の高さ,幅,およびチャネル数,Nは観測値の数です。 4
3次元イメージ回帰 1 x 1 x 1 x r x n。ここここ,rは応答の数,nは観测値の。 5
3次元image-to-image回帰 H x w x dx x c xN。ここでh, w, d,およびcはそれぞれ出力の高さ,幅,深さ,およびチャネル数,Nは観測値の数です。 5
sequence-to-one回帰 R行N列。ここで,R は応答の数、N は観測値の数です。 2
sequence-to-sequence回帰 R x N x S。ここで,R は応答の数、N は観測値の数、S はシーケンス長です。 2

たとえば,ネットワークで応答が1つのイメージ回帰ネットワークを定義していてミニバッチのサイズが50の場合,Tはサイズ1 x 1 x 1 x 50の4次元配列です。

Yのサイズは前の層の出力によって異なります。YTと同じサイズになるように,正しいサイズを出力する層を出力層の前に含めなければなりません。たとえばR個の応答があるイメージ回帰の場合,Yを必ず正しいサイズの4次元配列にするために,出力層の前にサイズがRの全結合層を含めることができます。

関数forwardLossおよびbackwardLossには次の出力引数があります。

関数 出力引数 説明
forwardLoss 损失 予測Yと真のターゲットTの間で計算された損失
backwardLoss dLdY 予測Yについての損失の微分

backwardLossは前の層で必要なサイズのdLdYを出力し,dLdYYと同じサイズでなければなりません。

GPU互換性

層の順方向関数がdlarrayオブジェクトを完全にサポートしている場合,層はGPU互換です。そうでない場合,GPU互換にするには,層関数が入力をサポートし,gpuArray(并行计算工具箱)型の出力を返さなければなりません。

多くのMATLAB組み込み関数が入力引数gpuArray(并行计算工具箱)およびdlarrayをサポートしています。dlarrayオブジェクトをサポートしている関数の一覧については,dlarrayをサポートする関数の一覧を参照してください。GPUで実行される関数の一覧については,GPUでのMATLAB関数の実行(并行计算工具箱)を参照してください。深层学习にgpuをををには,サポートされているgpuデバイスデバイスもなければばませませんんんれれいるについてについてははは。リリース别のgpuサポート(并行计算工具箱)を参照してください。MATLABでのGPUの使用の詳細は,MATLABでのGPU計算(并行计算工具箱)を参照してください。

ネットワークにカスタム回帰出力層を含める

深度学习工具箱では,カスタム出力層を他の出力層と同じように使用できます。この節では,カスタム出力層を使用した回帰用ネットワークを作成し,学習させる方法を説明します。

この例では,畳み込みニューラルネットワークアーキテクチャを構築し,ネットワークの学習を行い,学習済みネットワークを使用して手書きの数字の回転角度を予測します。このような予測は,光学式文字認識に役立ちます。

カスタム平均绝対误差回帰层をしします。この层を作物するは,ファイルmaeRegressionLayer.mを現在のフォルダーに保存します。

例の学習データを読み込みます。

[XTrain ~, YTrain] = digitTrain4DArrayData;

層配列を作成し,カスタム回帰出力層maeRegressionLayerを含めます。

layers = [imageInputLayer([28 28 1])卷积2dlayer (5,20) batchNormalizationLayer relullayer fulllyconnectedlayer (1) maeRegressionLayer('Mae')]
层= 6 x1层与层:数组1”的形象输入28 x28x1图像zerocenter正常化2”卷积20 5 x5旋转步[1]和填充[0 0 0 0]3“批量标准化批量标准化4”ReLU ReLU 5”完全连接1完全连接层6‘美’回归输出平均绝对误差

学習オプションを設定し,ネットワークに学習させます。

选择= trainingOptions (“个”“详细”、假);网= trainNetwork (XTrain、YTrain层,选择);

回転角度の予測値と実際の値との間の予測誤差を計算することによって,ネットワーク性能を評価します。

[XTest ~,欧美]= digitTest4DArrayData;YPred =预测(净,XTest);predictionError = YTest - YPred;

真の角度から許容誤差限界内にある予測の数を計算します。しきい値を10度に設定し,このしきい値の範囲内にある予測の比率を計算します。

用力推= 10;numCorrect = sum(abs(predictionError) < thr);numTestImages =大小(XTest 4);= numCorrect / numTestImages准确性
精度= 0.7524

参考

|||||

関連するトピック