CNNのパラメータへの書き込みが行えない。
4 ビュー (過去 30 日間)
古いコメントを表示
下記のように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 件のコメント
採用された回答
Naoya
2017 年 8 月 30 日
現状、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 件のコメント
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で 深層学習データの前処理 についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!