使用2层GRU RNN分类器中最后一层或两层的输出?

时间:2015-11-24 05:25:13

标签: neural-network deep-learning tensorflow recurrent-neural-network

我正在尝试使用tensorflow。我试图建立一个基于序列作为输入的分类系统。我建立了一个由2层常规RNN和1层GRU单元组成的网络(张量流中的MultiRNNCell)然后我打算将softmax输出耦合到我最后一个GRU单元的隐藏状态。现在我注意到当我从MultiRNNCell输出中取出最后一个状态时。它的大小是我为GRU单元指定的隐藏层的3倍。我猜这是连接的所有3个RNN层的状态。它是否正确?如果是这样,将所有层的状态耦合到softmax输出是否有意义?或者我应该只在最后一个GRU单元格的状态下进行。

我在一些小玩具数据集上测试了这两个案例,算法似乎在两种情况下都学习了,但我不确定在真实情况下最有意义的是什么。

一些代码我如何指定RNN模型

cell = rnn_cell.MultiRNNCell([rnn_cell.BasicRNNCell(RNNlayer_size)]*2  +[rnn_cell.GRUCell(RNNlayer_size)])
outputs, states = rnn.rnn(cell, inputs,dtype = tf.float32)

## couple last stat to a softmax classifier
W = tf.Variable(tf.zeros([RNNlayer_size*3,output_size]))
b = tf.Variable(tf.zeros([output_size]))
y_ = tf.placeholder("float", shape=[None, output_size])
y = tf.nn.softmax(tf.nn.xw_plus_b(states[-1],W, b))

0 个答案:

没有答案