CNNのパラメータへの書き込みが行えない。

下記のように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のモデルパラメータを変更させることができず、困っています。 書き込むための方法を教えていただきたいです。

 采纳的回答

Naoya
Naoya 2017-8-30

2 个投票

現状、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 个)

类别

帮助中心File Exchange 中查找有关 Deep Learning Toolbox 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!