【发布时间】:2018-04-21 04:43:30
【问题描述】:
详细解释
我正在尝试为 QA 任务实现 Xiong et al. (2016) 和 Kumar et al. (2015) 中描述的动态内存网络。我已经用一个单词的答案使它适用于bAbi dataset,并得到与论文中描述的结果有些相似的结果(我相信一些超参数调整可以缩小其余的差距)。这是使用线性输出层作为答案模块来完成的。我想扩展模型以产生多词答案。
为此,我的意图是使用Kumar et al. (2015) 中等式 9 和 10 中描述的 GRU 来解码情节记忆的输出(Kumar et al. (2015) 和 Xiong et al (2016) 中的 m^T)。
这个 GRU 需要将大小为 [batch_size x 1 x embedding_size] 的 3D 张量作为输入,即从情节记忆中重构的输出 m^T,并输出大小为 [batch_size x answer_length x vocab_size] 的 3D 张量。
到目前为止,我已经尝试实现我自己的 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 的单元格的输入,如论文中所述。
此外,我不确定如何实现它,以使其采用固定大小的输入张量并输出可变大小的张量(因为并非所有答案都必须具有相同的长度)。根据Xiong et al. (2016)的以下句子,这应该是可能的:
对于需要序列输出的任务, RNN 可用于解码 a = [q; m^T],向量 q 和 m^T 的串联,到一组有序的标记。
tl;博士
如何在 Tensorflow 中实现一个采用固定大小输入张量并输出可变大小张量的 GRU?
任何帮助将不胜感激,谢谢!
【问题讨论】:
标签: machine-learning tensorflow nlp deep-learning rnn