CNNのパラメータへの書き込みが行えない。
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
下記のようにCNNを定義し、
if true
% code
CS=30;
NumAxis=6;
layers = [imageInputLayer([WinLen NumAxis 1])
convolution2dLayer([CS,1],1) % <- フィルタサイズ, フィルタ枚数
reluLayer
convolution2dLayer([CS,1],1)
reluLayer
fullyConnectedLayer(10)
reluLayer
fullyConnectedLayer(2)
reluLayer
fullyConnectedLayer(2)
softmaxLayer
classificationLayer()];
opt = trainingOptions('sgdm','MaxEpochs',1, 'InitialLearnRate',0.01);
Net = trainNetwork(DX,DY,layers,opt);
end
任意のコスト関数でCNNのモデルパラメータを最適化のために、8層目の数値微分を行おうとし、下記の書き込みを行おうとしました。
if true
Net.Layers(8,1).Weights(i,j)=TempNet.Layers(8,1).Weights(i,j)+0.000001;
end
すると、
SeriesNetwork の読み取り専用プロパティ 'Layers' を設定できません。
と出力されてしまい、CNNのモデルパラメータを変更させることができず、困っています。 書き込むための方法を教えていただきたいです。
0 Kommentare
Akzeptierte Antwort
Naoya
am 30 Aug. 2017
現状、SeriesNetwork オブジェクトから直接重みを編集することができません。
一旦、
Layers_tmp = Net.Layers;
のように Layers オブジェクトを取得してから、
Layers_tmp(8).Weights(1,1) = 1;
のように、重みを編集することができます。
※ SeriesNetwork につきましては、現状、 trainNetwork より作成されるネットワークのみの使用がサポートされていることになります。 SeriesNetwork オブジェクトは、学習時において、ユーザ側では意識されないフェーズで幾つかのオペレーションが含まれおり、基本的には、重みの変更は許可できないような仕様となっております。
なお、predict や classify, activations を実行させるためには、必ず、trainNetwork で学習済のような Series Network オブジェクトとして持っていく必要がございます。 上記例のLayers_tmp を 一旦、 trainNetwork 関数で 1epoch分のみ学習させる必要があります。 但し、1epoch はどうしても必要としてしまいますので、trainingOptions で、 学習率を非常に小さな値(微小な値)に設定することで、Series Network オブジェクトを生成する方法での代替案となります。
0 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Deep Learning Toolbox finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!