1つの反復レイヤーでネットワークをコンパイルしようとすると問題が見つかりました。最初のレイヤーの次元性に問題があるようで、RNNレイヤーがKerasでどのように機能するかを理解しているようです。KerasシンプルなRNNの実装
私のコードサンプルは次のとおりです。
model.add(Dense(8,
input_dim = 2,
activation = "tanh",
use_bias = False))
model.add(SimpleRNN(2,
activation = "tanh",
use_bias = False))
model.add(Dense(1,
activation = "tanh",
use_bias = False))
エラーは、このエラーに関係なくinput_dim
値の返され
ValueError: Input 0 is incompatible with layer simple_rnn_1: expected ndim=3, found ndim=2
です。私は何が欠けていますか?
素晴らしいです、もう1つ質問ありがとうございます。最初の解は完璧に働いていますが、無限の時間ステップ(理論上の質問、私が知っている限り、無限の時間ステップは愚かです)を持ちたいのですが?次に、第1の層からの出力を再構成して、2番目のソリューションを使用する必要があります。しかし、私は単純なテストをXORのメモシーケンスで行いました。出力をシャッフルしたとき、ネットワークは期待通りに反応しませんでした。シャッフル前と同じ出力を戻していた方がいいと言っていました。どのように再形成が反復層の作業に影響するか(最初の解と比較した場合) – Seraph
形状変更はデータ(任意のデータ)を取ります。これはセグメントで分割された連続した数字のシーケンスに過ぎません。 300要素があるとします。あなたが(30,10,1)のようにそれらを形作るとき、あなたはちょうど異なる方法でこれらの300要素を分けました。したがって、シーケンス目的のために再構成する場合は、達成したいこととデータの形式を理解しておく必要があります。そのため、重要な形で再構成することができます。 –
あなたの無限のシーケンスのためには、おそらく1つのサンプル 'BatchSize = 1、TimeSteps、Features 'の入力で作業し、' stateful = True'を使って繰り返しレイヤーをマークするべきです。これは、レイヤーがメモリを維持し、次のバッチが1つのシーケンスで前のバッチを続けるとみなされることを意味します。この場合、あるシーケンスが終了したと判断し、別のシーケンスの供給を開始すると、手動で「メモリを消去する」(「リセット状態」と呼ばれる)必要があります。 –