Concatenateした後RecurrentOutputから望んだ情報を取り出す方法

249 views
Skip to first unread message

たろう

unread,
Nov 30, 2017, 11:42:32 PM11/30/17
to Neural Network Console Users (JP)
図のようにConcatenateした後RecurrentOutputから望んだ情報を取り出すのはどうすればよいのでしょうか?
Sliceを使ってみたのですが望んだ情報を切り取れませんでした。
lstm112401.png

小林由幸

unread,
Dec 3, 2017, 8:20:30 PM12/3/17
to Neural Network Console Users (JP)
書き込んでいただいたネットワーク構成では、それぞれサイズが75であるLSTMの内部状態と出力、合計3つをConcatenateし、225次元になったものがRecurrentOutputの出力になっているようですので、RecurrentOutput後にSliceレイヤーを用い、この225次元のうち、最初の0~74次元、75~149次元、151~224次元をそれぞれSliceで抽出することで所望の中間出力が得られるかと思います。
Concatenateレイヤーは、最初にリンクした接続元レイヤーの出力から順に0~74次元、75~149次元、151~224次元に結合します。

小林由幸

unread,
Dec 6, 2017, 6:16:58 AM12/6/17
to Neural Network Console Users (JP)
分類と予測は同時に学習することで精度が高くなるケースもありますが、そうでないケースもあります。
また、十分な精度が出ないとするとその原因はさまざまです。
いくつか思い当たる可能性を挙げさせていただきます。

* モデルの複雑さに対して学習データ数は十分でしょうか?800次元のLSTMですので、ざっくり数万オーダーのデータが必要そうに思えます。

* 同様に、LSTMの後に分類用のLSTM(左下)が設置されており、モデルの複雑性が高くなっています。データ数が十分でない場合むしろ左下のLSTMは外し、LSTMのサイズはより小さくした方が評価データでの精度は高くなる可能性があります。

* 分類、予測共、入力の全時刻の出力がそのまま予測に使われています。分類側はともかく、予測側は各時刻毎の情報を使った予測を行ったほうが良いかと思います。具体的にはAffine_2の代わりに
Reshape(OutShape=(1,19,800))
Transpose(Axes=(2,0,1))
Convolution(OutMaps=75, KernelShape(1,1))
Transpose(Axes=(0,1,2,0))
Reshape(OutShape=(19,75))
とします。

たろう

unread,
Dec 8, 2017, 12:53:48 AM12/8/17
to Neural Network Console Users (JP)
分類をするためのロスレイヤーとしてBinaryCrossEntropyを使っているのですが
分類のためにBinaryCrossEntropyを使うのは正しいですか?
ちなみにデータセットはTrainingは2種類の時系列ジェスチャーが合計で2400個
Validationは430個用意しています。
lstm2017120801.png
lstm2017120802.png

たろう

unread,
Dec 8, 2017, 1:11:03 AM12/8/17
to Neural Network Console Users (JP)
データセットのxは時系列データ、yは2種類のジェスチャーの分類のために0と1を入力しています。
Reply all
Reply to author
Forward
0 new messages