Android上で動作するTensorFlowネットワーク(graphdef)があります。推論の結果は時間とともに変化する傾向があります。つまり、ラベルAが返された場合、入力データがBラベルを生成するデータに切り替わった場合でも、時間的に後続するAのストリームになる傾向があります。最終的に結果はBに切り替わりますが、遅れがあるようで、推論呼び出しの間にRNNがステートフルであることを示唆しています。私たちのネットワークはRNN/LSTMを使用しています。TensorFlow:Androidでの推論間のRNNの状態を初期化します。
cellLSTM = tf.nn.rnn_cell.BasicLSTMCell(nHidden)
cellsLSTM = tf.nn.rnn_cell.MultiRNNCell([cellLSTM] * 2)
RNNout, RNNstates = tf.nn.rnn(cellsLSTM, Xin)
私は推論の呼び出しの間RNNの状態を再初期化する必要がある場合、私は思ったんだけど。そのようなメソッドはTensorFlowInferenceInterface.javaインターフェイスで使用できないことに注意してください。私は、ノード値(FillNodeIntなどを使用)でアクティブ化できるグラフにRNNセル初期化ノードを挿入することが可能であると想像します。
私の質問は、TensorflowのRNN/LSTMのベストプラクティスです。推論の間に状態をクリアする必要がありますか?もしそうなら、それはどうやって行うのですか?
それどころか、のRNNがで前進状態を運ぶことができます時間の経過とともに初期化されていない場合、およびトレーニングセッションのランダムな一連のフレームでトレーニングされている場合、実際のデータではあまり予測できない傾向があります。したがって、ゼロ状態の各フレームを開始することが重要であることを確認してください。 TF発行委員会では、新しい 'dynamic_rnn'実装が各フレームで自動的に状態をゼロに初期化するとのコメントを見ました。しかし、私の場合、私は異常を見て、グラフの一部として初期化を保証したかったのです。 – Hephaestus