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

조회 수: 2 (최근 30일)
Yuto Omae
Yuto Omae 2017년 8월 30일
답변: Naoya 2017년 8월 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のモデルパラメータを変更させることができず、困っています。 書き込むための方法を教えていただきたいです。

채택된 답변

Naoya
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개)

카테고리

Help CenterFile Exchange에서 Deep Learning Toolbox에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!