首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Tensorflow中实现采用固定尺寸输入张量并输出可变尺寸张量的GRU?( Kumar等人,2015年的执行情况)

如何在Tensorflow中实现采用固定尺寸输入张量并输出可变尺寸张量的GRU?( Kumar等人,2015年的执行情况)
EN

Stack Overflow用户
提问于 2017-11-08 13:12:03
回答 1查看 201关注 0票数 0

详细解释

我试图为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方法调用,但是我一直无法这样做。在当前的情况下,调用方法如下所示:

代码语言:javascript
复制
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?

任何帮助都将不胜感激,谢谢!

EN

回答 1

Stack Overflow用户

发布于 2017-11-13 21:58:49

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47180667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档