【发布时间】:2017-04-01 17:28:04
【问题描述】:
我们有一个在 Android 上运行的 TensorFlow 网络 (graphdef),我注意到随着时间的推移,推理结果往往是相关的。也就是说,如果返回标签 A,即使输入数据切换到应该生成 B 标签的数据,也会有一个 A 的流及时跟随。最终,结果将切换到 B,但似乎存在滞后,这表明 RNN 在推理调用之间是有状态的。我们的网络正在使用 RNN/LSTM。
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/LSTM 的最佳实践是什么。是否需要在推论之间清除状态?如果是这样,如何做到这一点?
【问题讨论】:
标签: java android tensorflow lstm