1

Keras を使用して、再帰型ニューラル ネットワークを構築およびトレーニングしています。

from keras.models import Sequential
from keras.layers.core import Dense, Activation, Masking
from keras.layers.recurrent import LSTM

#build and train model
in_dimension = 3
hidden_neurons = 300
out_dimension = 2

model = Sequential()
model.add(Masking([0,0,0], input_shape=(max_sequence_length, in_dimension)))
model.add(LSTM(hidden_neurons, return_sequences=True, input_shape=(max_sequence_length, in_dimension)))
model.add(LSTM(hidden_neurons, return_sequences=False))
model.add(Dense(out_dimension))
model.add(Activation('softmax'))

model.compile(loss="categorical_crossentropy", optimizer="rmsprop")
model.fit(padded_training_seqs, training_final_steps, nb_epoch=5, batch_size=1)

padded_training_seqs[緯度、経度、温度] のシーケンスの配列であり、[0,0,0] の値ですべて同じ長さにパディングされます。このネットワークをトレーニングすると、最初のエポックで約 63 の損失が発生し、さらに多くのエポックで増加します。これによりmodel.predict、コードの後半で呼び出しが行われ、トレーニング値から完全に外れている値が返されます。たとえば、各シーケンスのほとんどのトレーニング値は 前後[40, 40, 20]ですが、RNN は一貫して 前後[0.4, 0.5]の値を出力するため、マスキング レイヤーに何か問題があると思います。

トレーニング X ( padded_training_seqs) データは次のようになります (かなり大きいだけです)。

[
[[43.103, 27.092, 19.078], [43.496, 26.746, 19.198], [43.487, 27.363, 19.092], [44.107, 27.779, 18.487], [44.529, 27.888, 17.768]], 
[[44.538, 27.901, 17.756], [44.663, 28.073, 17.524], [44.623, 27.83, 17.401], [44.68, 28.034, 17.601], [0,0,0]],
[[47.236, 31.43, 13.905], [47.378, 31.148, 13.562], [0,0,0], [0,0,0], [0,0,0]]
]

トレーニング Y ( training_final_steps) データは次のようになります。

[
[44.652, 39.649], [37.362, 54.106], [37.115, 57.66501]
]
4

1 に答える 1

0

Keras のマスキング レイヤーを悪用していることは確かです。詳細については、こちらのドキュメントを確認してください。

次のようなマスキング レイヤーを使用してみてください。

model.add(Masking(0, input_shape=(max_sequence_length, in_dimension)))

時間次元と値全体(つまり、[0,0,0])ではな​​く、時間ステップ次元のマスキング値だけが必要だと思うからです。

幸運を祈ります。

于 2016-07-15T22:54:54.163 に答える