我正在尝试使用 Tensorflow(r0.10,python 3.5)在玩具分类问题上训练循环神经网络,但我得到的结果令人困惑。
我想将 0 和 1 的序列输入到 RNN 中,并将序列中给定元素的目标类作为序列的当前值和先前值表示的数字,并将其视为二进制数。例如:
input sequence: [0, 0, 1, 0, 1, 1]
binary digits : [-, [0,0], [0,1], [1,0], [0,1], [1,1]]
target class : [-, 0, 1, 2, 1, 3]
Run Code Online (Sandbox Code Playgroud)
看起来这是 RNN 应该能够很容易学习的东西,但我的模型只能区分类 [0,2] 和 [1,3]。换句话说,它能够区分当前数字为 0 的类和当前数字为 1 的类。这让我相信 RNN 模型没有正确学习查看序列的先前值。
有几个教程和示例([ 1 ]、[ 2 ]、[ 3 ])演示了如何在张量流中构建和使用循环神经网络(RNN),但在研究它们之后我仍然没有看到我的问题(它没有有助于所有示例都使用文本作为源数据)。
我将数据作为tf.nn.rnn()length 列表输入T,其元素是[batch_size x input_size]序列。由于我的序列是一维的,input_size等于一,所以本质上我相信我正在输入一个长度序列的列表batch_size(我不清楚文档中哪个维度被视为时间维度)。这种理解正确吗?如果是这样的话,那么我不明白为什么 RNN 模型不能正确学习。
很难获得一小部分可以运行我的完整 RNN 的代码,这是我能做的最好的事情(它主要改编自此处的 PTB …