【问题标题】:How to implement GRU that takes fixed size input tensor and outputs a variable size tensor - in Tensorflow? (Implementation of Kumar et al., 2015)如何在Tensorflow中实现采用固定大小输入张量并输出可变大小张量的GRU? (Kumar 等人的实施,2015)
【发布时间】: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


    【解决方案1】:

    要在时间步 t 中访问时间步 t-1 的输出,您必须使用 TensorArrays 来存储之前的激活。

    【讨论】:

    • 非常感谢您的回复!我会看看我能不能让它工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 2019-03-12
    • 1970-01-01
    相关资源
    最近更新 更多