在tensorflow中使用注意力的一种方法是直接使用tf.contrib.seq2seq.LuongAttention
或tf.contrib.seq2seq.BahdanauAttention
。
但是,当我的注意力取决于编码器的隐藏状态和解码器的输出时,情况几乎不会变得混乱。
我正在尝试使用https://arxiv.org/pdf/1705.02012.pdf(第3.2节)中给出的注意。
等式是:
其中h代表编码器的隐藏状态,d代表文档,a代表答案,y代表解码器的输出,s代表解码器的隐藏状态。 f
是前馈神经网络。
如果我已经知道h
的值,我就可以一一传递给feed_dict
的{{1}}。但是这里需要创建一个图。
我可以做的一种方法是:
sess.run
对于h_d的每个 jth 索引,但是就内存而言,这是非常昂贵的。
如何在创建图形本身时将张量的 jth 值传递给tf.contrib.layers.fully_connected(tf.concat((h_d[:,j,:], h_a, yt_1, st_1), 1),...)
?还是有更好的方法呢?