MATLAB Answers

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

1 view (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となります)が等しくないためにエラーとなってしまいます。
何かよい方法はありませんでしょうか?

  0 Comments

Sign in to comment.

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)

Sign in to answer this question.