Clear Filters
Clear Filters

自作の出力層を定義す​る際、学習データ以外​の数値データを使用す​るにはどうすればよい​ですか?

6 views (last 30 days)
Fumiya Watanabe
Fumiya Watanabe on 21 Jun 2018
Commented: Fumiya Watanabe on 26 Jun 2018
自作の(回帰)出力層を定義する際、学習データ以外の数値データを使用するにはどうすればよいですか?
ひとつの方法として、次のように層のプロパティとして数値データXをコンストラクタで与えておくことを考えています。
classdef myRegressionLayer < nnet.layer.RegressionLayer
properties
X
end
methods
function layer = myRegressionLayer(X)
layer.X = X;
end
function loss = forwardLoss(layer, Y, T)
loss = mylossfun(Y, layer.X(id, :));
end
function dLdX = backwardLoss(layer, Y, T)
dLdX = d_mylossfun(Y);
end
end
end
しかし、この方法には2点の問題があります。
  1. trainNetworkで与える学習データに対応するインデックスを取得する方法がわからない
  2. 数値データXは学習、検証および実装でそれぞれ異なるデータを与えたいが、この方法では学習時のXだけしか使えない
もうひとつの方法として、今回は損失関数の計算にターゲットデータが不要なため、ターゲットデータに数値データXを与えることを考えました。 しかし、この方法ではtrainNetworkを実行した際にYのサイズとTのサイズ(ここではT=Xとなります)が等しくないためにエラーとなってしまいます。
何かよい方法はありませんでしょうか?

Accepted Answer

Naoya
Naoya on 25 Jun 2018
基本的に敷居が高い処理になるとは思いますが、あくまでもアイディアレベルで次のような方法は如何でしょうか?
1) 入力側のデータに対してプラスアルファで、評価関数に与えたいデータを予め追加しておきます。
2) 従来の入力信号 と 評価関数に与えたいデータを分離します。 こちらの分離作業は、カスタムネットワークにて行うことになると思います。
3) DAGネットワークで従来の畳み込みや全結合層を含む処理と 評価関数に与えたいデータを別ルートとします。
4) myRegressionレイヤの前段で、従来の畳み込みのプロセスから得られた行列と、上記2) で分割した評価関数側に与えたいデータを結合処理します。
5) myRegressionレイヤ側で、カスタム評価関数を定義します。
  1 Comment
Fumiya Watanabe
Fumiya Watanabe on 26 Jun 2018
ご教示いただいた方法で実現できそうです。 大変ありがとうございました。

Sign in to comment.

More Answers (0)

Products


Release

R2018a

Community Treasure Hunt

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

Start Hunting!