详细解释
我试图为QA任务实现熊等人(2016年)和Kumar等人(2015)中描述的动态内存网络。我让它在bAbi数据集中使用一个单词的答案,并得到了与论文中描述的结果有些相似的结果(我相信一些超参数调优可以缩小其余的差距)。这是使用一个线性输出层作为回答模块。我想扩展这个模型来生成多个单词的答案。
为此,我的意图是使用Kumar等人(2015)中方程9和10中描述的GRU,解码来自情景记忆的输出( Kumar等人(2015)和Xiong等人(2016年)中的m^T)。
该[batch_size x 1 x embedding_size]单元需要一个尺寸为[batch_size x answer_length x vocab_size]的三维张量作为输入,即从片段存储器m^T中得到的整形输出,并输出尺寸为[batch_size x answer_length x vocab_size]的三维张量。
到目前为止,我已经尝试实现我自己的GRU,由Tensorflow的dynamic_rnn方法调用,但是我一直无法这样做。在当前的情况下,调用方法如下所示:
def call(self, inputs, state, scope=None):
with vs.variable_scope(scope or "decoder_gru_cell"):
with vs.variable_scope("gates"):
z = math_ops.sigmoid(_linear([inputs, state], self._num_units, True))
r = math_ops.sigmoid(_linear([inputs, state], self._num_units, True))
with vs.variable_scope("candidate"):
r = r*_linear(state, self._num_units, False)
with vs.variable_scope("input"):
x = _linear(inputs, self._num_units, True)
h_hat = math_ops.tanh(r + x)
new_h = z * h_hat + (1 - z) * state
output = tf.nn.softmax(_linear(new_h))
return output, new_h我似乎不能让它使用时间步骤t-1与问题向量连接的输出作为时间步骤t上单元格的输入,正如论文中所描述的那样。
此外,我不确定如何实现它,使它接受一个固定大小的输入张量,并输出一个可变大小的张量(因为并不是所有的答案都有相同的长度)。根据熊等人(2016年)的以下一句话,这应该是可能的:
对于需要序列输出的任务,可以使用RNN将a= q;m^T (向量Q和m^T的级联)解码为有序的令牌集。
tl;dr
如何在Tensorflow中实现采用固定大小的输入张量并输出可变大小张量的GRU?
任何帮助都将不胜感激,谢谢!
发布于 2017-11-13 21:58:49
要在时间步骤t中访问时间步骤t-1的输出,必须使用TensorArrays存储以前的激活。
https://stackoverflow.com/questions/47180667
复制相似问题