問題タブ [lstm-stateful]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
lstm - LSTM 変数の場合、「tensorflow:Gradients do not exist for variables」というエラーが表示されます
こんにちは、双方向の LSTM レイヤーがあります。
ご覧のとおり、LSTM から非表示の状態を消費しているだけです (セルの状態ではありません)。
それが理由ですか、次の警告が表示されますか:
WARNING:tensorflow:Gradients do not exist for variables for (backward layer):
- lstm_cell_2/kernel:0',
- lstm_cell_2/recurrent_kernel:0'
- lstm_cell_2/bias:0'
これを無視することは論理的に聞こえません。このエラーに対処するにはどうすればよいですか?
python - Flask での Keras ステートフル LSTM 推論
Keras を使用してステートフル LSTM で推論を実行するサービスを実行しています。ただし、ここでスレッドのセマンティクスが何であるか疑問に思っています。フラスコセッションごとにモデルを保存する方法を尋ねているのではなく、ステートフルモデルを実行するときにKerasの内部で何が起こっているのかにもっと興味があります。たとえば、スレッドごとに新しいモデルを作りすぎていますか? Keras はスレッドごとの状態を自動的に処理しますか?
複製はフラスコセッションごとにオブジェクトを保存することを明示的に扱うため、この質問は前述の複製とは異なります。この質問は、Keras がスレッド間のステートフル モデルをどのように処理するかを扱います。
推論のための私のコードは次のようになります:
読み込み中:
推論:
モデルの状態をリセットしたため、これは、スレッドごとに新しいモデルを作成する必要があるか、グローバルに作成されたバイアス モデルで予測を実行するときにロックを実行する必要があるか、または欠落している他のメカニズムがあることを意味しますか? ?
Keras 2.4.3 で TF 2.3.1 を実行していることを付け加えておきます。多くの場合、ソリューションを調査すると、これらのバージョンと互換性がありません。
tensorflow - 入力データの長さが変化すると、LSTM は異なる方法で予測します
注: 以下のすべての数値は目安です。
次のパラメーターを使用して LSTM モデルをトレーニングしました。
model.predict()
将来の次の結果を予測するには、少なくとも 5 つのサンプルが必要であることはわかっています。たとえば、CSV ファイルに次の項目があるとします。
は 5 に等しいのでtime_step
、データを 1 x 5 x 4 のサペを持つ配列に変換します。この配列を X_inputと呼びましょう。今:
1つのアイテムのみを返すことになっています。この値が正しい答えである 58 であるとしましょう。たとえば、CSV ファイルに 6 つの項目が含まれている場合:
X_inputの形状は 2 x 5 x 4 で、model.predict()
[57, 58] であるはずの 2 つの値を返します。
実際、私の CSV ファイルの最後の 5 つのサンプルが同じである場合、最後の予測値が同じ (つまり 58) のままであることを期待しますが、そうではありません! CSV ファイルの最後の 5 つのサンプルを変更せずに保持しているにもかかわらず、CSV ファイルのサンプル数が変化すると変化します。
stateful
最初は、LSTM レイヤーのパラメーターと関係があるのではないかと考えました。しかし、私はそのパラメーターを使用していないので、Flase がデフォルト値であると仮定します。
何かアイデアはありますか?