入力がタイムメジャーではなくバッチメジャーである場合、RNNは異なる依存パターンを学習しますか?バッチメジャーとタイムメジャーLSTM
答えて
(編集:それはが意味になりますが、私はそれがないことに気づいなぜ申し訳ありません、私の最初の引数がありませんでしたので、これは少しOTである。)
私はTF-グループの推論を発見していませんこれの後ろですが、はではありませんは、opsがC++で書かれているような計算上の意味を持っています。
直感的に、我々は同じタイムステップ上の同じシーケンスから異なる特徴をマッシュアップ(乗算/加算など)したいと思う。バッチ/シーケンスは、バッチ/シーケンス>タイムステップのように機能することができるので、異なるタイムステップを並列に行うことはできません。 default Numpy and C++ uses row-major(C様)メモリレイアウトにより
よう
[[ 0. 1. 2.]
[ 3. 4. 5.]
[ 6. 7. 8.]]
メモリに[0,1,2,3,4,5,6,7,8]
ように敷設されています。これは、我々は行優先メモリで
x = np.zeros([time,batch,feature])
(tensorflowでtime_major=True
)
を持っている場合、我々はx[0,0,0],x[0,0,1],x[0,0,2],…,x[0,1,0],...
ので、元のようなレイアウトを得ることを意味します。同じシーケンスとタイムステップ(w*x[t,b,:]
)からの重みとベクトルの内積は、次のシーケンスw*x[t,b+1,:]
などに続く最も連続的な操作です。これはトレーニング中に必要なものです。デフォルトはtime_major=False
で
我々持って、同じ順序が異なるタイムステップからその元の機能はこれが時間の場合に速い一方の配列を予測するかもしれないw*x[batch,t+1,:]
などが続いすなわちw*x[batch,t,:]
以上連続している[バッチ、時間、機能] RNNは公開されていますが、これは推測です。
私がしたのと同じ理由でこの質問に来た場合、必ずしも行メジャーではなく、少し不気味なナンシーインデックス作成に注意することを学んだ。これを見てください。予想通り:
x = np.zeros([3,3])
x[0:9].flat = np.arange(10)
print x
> [[ 0. 1. 2.]
> [ 3. 4. 5.]
> [ 6. 7. 8.]]
またx[1] == x[0,1]
が、
print x[1]
> [ 3. 4. 5.]
print x[np.arange(10)<=4]
> IndexError: index 3 is out of bounds for axis 0 with size 3
を期待するモデルが学習するものに違いはありません。
タイムステップtでは、RNNはt-1からの結果を必要とするため、タイムメジャーなものを計算する必要があります。 time_major=False
の場合、TensorFlowは(batch_size, max_sequence_length)
から(max_sequence_length, batch_size)
*までの配列のバッチを転置します。転置されたバッチを一度に1行ずつ処理します。t = 0では、各シーケンスの最初の要素が処理され、隠れ状態と出力が計算されます。 t = max_sequence_lengthで、各シーケンスの最後の要素が処理されます。
データがすでに時間切れの場合は、転位を避けるtime_major=True
を使用してください。しかし、TensorFlowに手作業でデータを渡す前に手動でデータを入れ替えることにはあまり意味がありません。
*多次元入力(例:単語埋め込みのシーケンス:(batch_size, max_sequence_length, embedding_size)
)、軸0と1は転置され、(max_sequence_length, batch_size, embedding_size)
- 1. LSTMバッチとタイムステップ
- 2. LSTMテンソル形状とハイパーパラメータTensorflow
- 3. はLSTMネットワークとシャムモデルtensorflowに
- 4. TensorFlow:別のLSTMの上のLSTM
- 5. Tensorflow LSTM - LSTMセルの行列乗算
- 6. ケラスステートフルステートレスLSTM
- 7. LSTMトレーニングパターン
- 8. kerasステートフルLSTM
- 9. Multimimentional lstm tensorflow
- 10. Keras LSTMエラー
- 11. Archlinux |カフェ・LSTMビルド
- 12. Keras reshape input LSTM
- 13. 1対1 LSTM
- 14. LSTMのバックプロパゲーションスルー(BPTT)
- 15. Tensorflow Serving - ステートフルLSTM
- 16. Deeplearning4j LSTM例
- 17. LSTM上のケアアテンションレイヤ
- 18. ケラス:クラスウェイトのLSTM
- 19. ケラスステートフルLSTMエラー
- 20. lstmモデルのOutput_shape
- 21. LSTM Timeseries Classification
- 22. Tensorflow LSTM Regularization
- 23. LSTM for Regression(Tensorflow)
- 24. 可変シーケンスのLSTMとフルシーケンスの返信
- 25. KerasのLSTMのTimeDistributedレイヤーとリターンシーケンスなど
- 26. LSTMモデルのoutput_node_namesとは何ですか?
- 27. 列車LSTMを用いたモデルとkeras
- 28. 条件付きLSTM
- 29. LSTMエラーのpython keras
- 30. unhashable type:Keras LSTMの 'Dimension'
具体的な答えはありませんが、文脈依存であり、例えば行列のバッチはバッチメジャー記憶(各マットムは独立しているので)、同じ畳み込みを複数の画像に適用する場合も同様です。画像処理はTensorFlowの主な用途であるため、慣習が最適ではない可能性のある場所に染み込むことはあまり驚くことではありません。 –
静的なLSTMのコンテキストではどうでしょうか。おそらく、バッチ内のタイムステップのアライメントにいくつかの緊急の特性があると思っていましたが、これらもタイム・メジャーな形で発見されると思います。 – ssjadon
私はLSTMが時間の重要性を常に求めていると思っています。なぜなら、LSTMは時間の入力に基づいてスライスされるからです。他の種類のRNNは例外かもしれません.WebNetのようなバッチメジャーが必要な場合もあります。効率の内訳は –