回答

3

我也想要显示Tensorflow seq2seq操作对我的文本摘要任务的注意力。我认为临时解决方案是使用session.run()来评估上面提到的注意模板张量。有趣的是,原来的seq2seq.py操作被认为是旧版本,并且不能在github中很容易找到,所以我只是在0.12.0轮子分配中使用了seq2seq.py文件并对其进行了修改。为了绘制热图,我使用了'Matplotlib'包,非常方便。

关注可视化的新闻标题textsum最终输出看起来是这样的: enter image description here

我修改代码如下: https://github.com/rockingdingo/deepnlp/tree/master/deepnlp/textsum#attention-visualization

seq2seq_attn.py

# Find the attention mask tensor in function attention_decoder()-> attention() 
# Add the attention mask tensor to ‘return’ statement of all the function that calls the attention_decoder(), 
# all the way up to model_with_buckets() function, which is the final function I use for bucket training. 

def attention(query): 
    """Put attention masks on hidden using hidden_features and query.""" 
    ds = [] # Results of attention reads will be stored here. 

    # some code 

    for a in xrange(num_heads): 
    with variable_scope.variable_scope("Attention_%d" % a): 
     # some code 

     s = math_ops.reduce_sum(v[a] * math_ops.tanh(hidden_features[a] + y), 
           [2, 3]) 
     # This is the attention mask tensor we want to extract 
     a = nn_ops.softmax(s) 

     # some code 

    # add 'a' to return function 
    return ds, a 

seq2seq_model_attn.py

predict_attn.pyeval.py

# Use the plot_attention function in eval.py to visual the 2D ndarray during prediction. 

eval.plot_attention(attn_matrix[0:ty_cut, 0:tx_cut], X_label = X_label, Y_label = Y_label) 

并可能在未来tensorflow将会有更好的方法来提取和可视化的关注权重映射。有什么想法吗?

+0

嘿,尼斯答案,我试过相同的,但我有一个意想不到的关注向量。你可以看看:http://stackoverflow.com/questions/43123105/weird-attention-weights-when-trying-to-learn-to-inverse-sequence-with-seq2seq thx – pltrdy