主要内容

メ,ジ分類用の積層自己符号化器の学習

この例では,積層自己符号化器に学習させて,数字の。

複数の隠れ層があるニューラルネットワークは,イメージなどデータが複雑である分類問題を解くのに役立ちます。各層は,異なる抽象化レベルで特徴を学習できます。ただし,複数の隠れ層があるニュ,ラルネットワ,クの学習は,実際には難しい場合があります。

複数の層があるニューラルネットワークの学習を行う効果的な方法の1つは,一度に1つの層の学習を行うことです。これを行うには,目的の各隠れ層に対して自己符号化器として知られている特殊なネットワークの学習を行います。

この例では2つの隠れ層があるニューラルネットワークの学習を行い,イメージ内の数字を分類する方法を説明します。最初に,自己符号化器を使用して教師なしの方法で個々の隠れ層の学習を行います。次に,最後のソフトマックス層の学習を行い,層を結合して積層ネットワークを形成し,教師ありの方法でもう一度このネットワークの学習を行います。

デ,タセット

この例では,学習とテストの全体をとおして合成デ,タを使用します。合成イメージは,さまざまなフォントを使用して作成された数字のイメージにランダムなアフィン変換を適用して生成されたものです。

それぞれの数字▪▪メジは28 × 28ピクセルで,5000個の学習例があります。学習デ,タを読み込み,一部の,メ,ジを表示できます。

将训练数据装入内存[xTrainImages,tTrain] = digitTrainCellArrayData;显示一些训练图片clfI = 1:20 subplot(4,5, I);imshow (xTrainImages{我});结束

イメージのラベルは,行5000列の行列に格納されます。この行列は,すべての列で数字が属するクラスを示す1つの要素が1になり,列内の他のすべての要素は0になります。10番目の要素が1の場合,数字メジは0であることに注意してください。

最初の自己符号化器の学習

はじめに,ラベルを使用しない学習デ,タでスパ,ス自己符号化器の学習を行います。

自己符号化器とは,出力で入力を複製しようとするニュ,ラルネットワ,クです。したがって,入力のサaaplズは出力のサaaplズと同じになります。隠れ層のニュロンの数が入力のサズより小さい場合,自己符号化器は入力の圧縮表現を学習します。

ニュ,ラルネットワ,クには,学習前にランダムに初期化された重みが設定されます。そのため,学習の結果は毎回異なります。この動作を回避するには,乱数発生器のシ,ドを明示的に設定します。

rng (“默认”

自己符号化器の隠れ層のサ@ @ズを設定します。学習を行う自己符号化器に対して,入力サaaplズより小さいサaaplズを設定することをお勧めします。

hiddenSize1 = 100;

学習を行う自己符号化器のタ@ @プは,スパ@ @ス自己符号化器です。この自己符号化器は,正則化項を使用して最初の層のスパ,ス表現を学習します。さまざまなパラメ,タ,を設定することで,これらの正則化項の影響を制御できます。

  • L2WeightRegularizationは,ネットワクの重み(バアスを除く)に対するl2正則化項の影響を制御します。これは一般的に,非常に小さくする必要があります。

  • SparsityRegularizationは,隠れ層からの出力のスパ,ス性に制約を課そうとする,スパ,ス正則化項の影響を制御します。これは,重みに対するスパ,ス正則化項の適用とは異なるので注意してください。

  • SparsityProportionはスパ,ス正則化項のパラメ,タ,です。これは,隠れ層からの出力のスパ,ス性を制御します。SparsityProportionに低い値を指定すると,通常,隠れ層の各ニューロンは,少数の学習例の出力を大きくした場合に限り”特殊化”します。たとえば,SparsityProportion0.1をに設定するのは,隠れ層の各ニューロンの学習例に対する平均出力が0.1になるようにすることと等価です。この値は0 ~ 1でなければなりません。理想値は問題の性質によって異なります。

ここで,上記の正則化項に値を指定して,自己符号化器の学習を行います。

autoenc1 = trainAutoencoder(xTrainImages,hiddenSize1,...“MaxEpochs”, 400,...“L2WeightRegularization”, 0.004,...“SparsityRegularization”4...“SparsityProportion”, 0.15,...“ScaleData”、假);

自己符号化器の図を表示できます。自己符号化器は、符号化器と、その後に続く復号化器で構成されています。符号化器は隠れ表現に入力をマッピングし、復号化器はこのマッピングを逆にして元の入力を再構成しようとします。

视图(autoenc1)

最初の自己符号化器の重みの可視化

自己符号化器の符号化器部分で学習されたマッピングは,デ,タからの特徴の抽出に役立,ます。符号化器の各ニューロンには関連付けられた重みのベクトルがあり,この重みのベクトルは,特定の視覚的な特徴に応答するように調整されます。これらの特徴の表現を表示できます。

图()plotWeights (autoenc1);

自己符号化器によって学習された特徴が,数字イメージに含まれる曲線や直線のパターンを表すことを確認できます。

自己符号化器の隠れ層の100次元の出力は,入力を圧縮したものです。これには,上記の可視化された特徴に対する応答がまとめられています。学習デ,タから抽出されたこれらの一連のベクトルで,次の自己符号化器の学習を行います。まず,学習済みの自己符号化器の符号化器を使用して,特徴を生成しなければなりません。

feat1 = encode(autoenc1,xTrainImages);

2番目の自己符号化器の学習

最初の自己符号化器の学習を行った後,同様に2番目の自己符号化器の学習を行います。主な違いは2番目の自己符号化器では,最初の自己符号化器によって生成された特徴を学習データとして使用することです。また,隠れ表現のサイズを50に減らして,2番目の自己符号化器の符号化器によって入力データのさらに小さい表現の学習が行われるようにします。

hiddenSize2 = 50;autoenc2 = trainAutoencoder(feat1,hiddenSize2,...“MaxEpochs”, 100,...“L2WeightRegularization”, 0.002,...“SparsityRegularization”4...“SparsityProportion”, 0.1,...“ScaleData”、假);

この場合にも,関数视图を使用して自己符号化器の図を表示できます。

视图(autoenc2)

前のセットを2番目の自己符号化器の符号化器に渡すことによって,特徴の2番目のセットを抽出できます。

Feat2 = encode(autoenc2,feat1);

学習デタの元のベクトルは784次元でした。これらを1番目の符号化器に渡した後は,100次元に減少しています。2番目の符号化器を使用した後は,さらに50次元に減少しています。これで50次元のベクトルを異なる数字クラスに分類するように,最後の層の学習を行うことができます。

最後のソフトマックス層の学習

50次元の特徴ベクトルを分類するように,ソフトマックス層の学習を行います。自己符号化器とは異なり、学習データのラベルを使用して教師ありの方法でソフトマックス層の学習を行います。

softnet = trainSoftmaxLayer(feat2,tTrain,“MaxEpochs”, 400);

関数视图を使用してソフトマックス層の図を表示できます。

视图(softnet)

積層ニュ,ラルネットワ,クの形成

3 .。この時点で,学習した3のニュラルネットワクを表示すると有益です。それは,autoenc1autoenc2,およびsoftnetです。

视图(autoenc1)

视图(autoenc2)

视图(softnet)

前述のように,特徴の抽出には自己符号化器の符号化器が使用されています。自己符号化器の符号化器とソフトマックス層を積み重ねて、分類用の積層ネットワークを形成できます。

stackkednet = stack(autoenc1,autoenc2,softnet);

関数视图を使用して,積層ネットワ,クの図を表示できます。ネットワ,クは,自己符号化器の符号化器とソフトマックス層によって形成されています。

视图(stackednet)

ネットワ,ク全体が形成されると,テストセットに対する結果を計算できます。積層ネットワクでメジを使用するには,テストメジの形状を行列に変更しなければなりません。これを行うには,イメージの列をスタックしてベクトルを形成した後に,これらのベクトルから行列を形成します。

获取每个图像中的像素数imageWidth = 28;imageHeight = 28;inputSize = imageWidth*imageHeight;加载测试映像[xTestImages,tTest] = digitTestCellArrayData;将测试图像转换为向量,并将它们放入一个矩阵中。xTest = 0 (inputSize,numel(xTestImages));i = 1:numel(xTestImages) xTest(:,i) = xTestImages{i}(:);结束

混同行列を使用して結果を可視化できます。行列の右下の正方形の数字は,全体の精度を示します。

y = stackednet(xTest);plotconfusion (tt, y);

積層ニュ,ラルネットワ,クの微調整

多層ネットワーク全体に対して逆伝播を実行することによって,積層ニューラルネットワークの結果を改善できます。このプロセスは,多くの場合,微調整と呼ばれます。

教師ありの方法で学習デタにいて再学習を行うことで,ネットワクを微調整します。これを行う前に,テストイメージの場合と同様に,学習イメージの形状を行列に変更しなければなりません。

将训练图像转换成向量,并将它们放入一个矩阵中。xTrain = 0 (inputSize,numel(xTrainImages));i = 1:numel(xTrainImages) xTrain(:,i) = xTrainImages{i}(:);结束%执行微调stackednet = train(stackednet,xTrain,tTrain);

この場合にも,混同行列を使用して結果を表示できます。

y = stackednet(xTest);plotconfusion (tt, y);

まとめ

この例では,自己符号化器を使用して,イメージ内の数字を分類するように積層ニューラルネットワークの学習を行う方法を説明しました。説明した手順は,文字イメージ,つまり一様で小さな,特定カテゴリのオブジェクトイメージといったものの分類など,その他の類似の問題に適用できます。