2017-03-04 4 views
2

私は、異種のソースからなる大きなデータセットでRNNを訓練しています。私は、1つのセットの履歴が次のセットにこぼれ落ちることを望んでいません。これは、あるセットの最後に隠れた状態をリセットしてから、次のセットに送ることを意味します。 Kerasでどうすればいいですか?ドキュメントは、あなたが低レベルの設定に入ることができると主張しています。Kerasの入力データセット間のRNNの非表示状態をリセットできますか?

私がしようとしているのは、新しいデータセットが入力されるたびにlstm隠し状態をリセットすることです。したがって、前のデータセットの影響は引き継がれません。 KarpathyのシンプルなPythonの実装から

prevh = Hout[t-1] if t > 0 else h0 

ライン参照 https://gist.github.com/karpathy/587454dc0146a6ae21fc ライン45私はLSTM層を見つけ、それにリセット呼び出した場合

が、私はそれが重みとバイアスの全体研修を一掃するだろう心配していますだけでなく、ハウト

はここでトレーニングループコード

for iteration in range(1, 10): 
    for key in X_dict: 
     X = X_dict[key] 
     y = y_dict[key] 
     history=model.fit(X, y, batch_size=batch_size, callbacks=cbks, nb_epoch=1,verbose=0) 

ですループの各ターンは、単一の市場からのデータを供給します。それでは、私は第1幕の大会をリセットしたいと思っています。

+0

隠し状態をリセットしたいのはなぜですか?これは潜在的な機能の学習が行われる場所ですか? –

答えて

2

モデルの状態をリセットするには、特定のレイヤーまたはモデル全体で.reset_states()を呼び出します。あなたがデータセットのリストを持っている場合source

だから:

for ds in datasets : 
    model.reset_states() 
    model.fit(ds['inputs'],ds['targets'],...) 

は、あなたが探しているものということですか?

EDIT:

for iteration in range(1, 10): 
    for key in X_dict: 
     model.reset_states() # reset the states of all the LSTM's of your network 
     #model.layers[lstm_layer_index].reset_states() # reset the states of this specific LSTM layer 
     X = X_dict[key] 
     y = y_dict[key] 
     history=model.fit(X, y, batch_size=batch_size, callbacks=cbks, nb_epoch=1,verbose=0) 

これは、あなたがそれを適用する方法です。

デフォルトでは、LSTMはステートフルではありません。つまり、シーケンスを通過した後に隠れた状態を保持しないということです。新しいシーケンスを開始するときの初期状態は0に設定されます。stateful=Trueを選択すると、前のシーケンスの最後の非表示状態(出力)がバッチ内の次のシーケンスに対して初期化されます。シーケンスが続きました。

Doing model.reset_states()は、シーケンスが最初から開始した場合と同様に、メモリに保持された最後の非表示状態を0にリセットするだけです。

.reset_states()があなたの期待することを信用できない場合は、自由にソースコードに行くことができます。

+0

私は、単一のレイヤーをリセットする方法を見つけるのに苦労しています。あなたはそれにいくつかのコードを置くことができる場合。私は正確に私がリセットしようとしているものを私のポストでさらに説明した。 – bhomass

+0

私はmodel.layers [0] .reset_states()を試しました。 Layerはステートフルでなければならないと言います。 layers [0]はlstm層です。 – bhomass

+0

あなたのコードを表示してください、私はあなたが現在何をしているのかを知る必要があります。ネットワークを一括して供給していますか?隠れた状態を各サンプルの後またはサンプル/バッチの大量の後に0にリセットする必要がありますか? –

関連する問題