我们有一个在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接口中没有这种方法可用。我想,可以将一个RNN单元初始化节点插入到可以用节点值激活的图形中(使用FillNodeInt或类似的方法)。
所以我的问题是:在Tensorflow中RNN/LSTMs的最佳做法是什么。是否需要在推理之间清除状态?如果是这样,一个人怎么做?
相反,RNNs可以向前携带状态:
最后,RNN在新的动态RNN来定义:如
初始状态可以然后被定义随着时间的推移未初始化时,如果使用培训课程中的随机系列帧进行训练,则它们在实际数据中的可预测性往往较差。所以确保它以零状态开始每一帧都很重要。我在TF Issue Board上看到一些评论,说明新的'dynamic_rnn'实现在每一帧自动初始化它的状态为零。但是,在我的情况下,我看到异常情况,并希望保证初始化作为图的一部分。 – Hephaestus