问题标签 [attention-model]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
tensorflow - 如何在可变范围内重用 LSTM 层和变量(注意机制)
我的代码中有一个问题,我想在我的代码中共享权重lstm_decoder
(所以基本上只使用一个 LSTM)。我知道网上有一些资源,但我仍然无法理解为什么以下不共享权重:
我想为每个循环迭代使用相同的 LSTM 单元和相同的 W_target。但是,我在循环中得到了 forprint(initial_input, last_encoder_state)
和print(W_target)
for window_size = 2 的以下输出。
更新:在Maxim的评论之后,我尝试了以下语法
它现在可以正确共享变量 W_target,但是共享 lstm 单元格/权重仍然存在问题:
recurrent-neural-network - 没有 MAX_LENGTH 的 AttentionDecoderRNN
来自 PyTorch Seq2Seq 教程,http ://pytorch.org/tutorials/intermediate/seq2seq_translation_tutorial.html#attention-decoder
我们看到注意力机制在很大程度上依赖于MAX_LENGTH
参数来确定 的输出维度attn -> attn_softmax -> attn_weights
,即
进一步来说
我知道MAX_LENGTH
变量是减少数字的机制。中需要训练的参数AttentionDecoderRNN
。
如果我们没有MAX_LENGTH
预先确定。我们应该用什么值来初始化attn
层?
会是output_size
吗?如果是这样,那么这将是学习与目标语言中完整词汇相关的注意力。这不是 Bahdanau (2015) 关注论文的真正意图吗?
tensorflow - tf.contrib.seq2seq.AttentionWrapper 的参数 attention_size 是什么意思?
中有一个参数anttention_size
,tf.contrib.seq2seq.AttentionWrapper
文档说“基本的注意力包装器是 tf.contrib.seq2seq.AttentionWrapper。这个包装器接受一个 RNNCell 实例、一个 AttentionMechanism 实例和一个注意力深度参数(attention_size);”,但是什么是注意力深度?在 Bahdanau 和 Luong 的论文中,我发现完全没有注意力深度,注意力机制的源代码我也不是很清楚。谁能告诉我'attention_size'的意思和原理,谢谢!
neural-network - 对分类实施分层注意
我正在尝试实现用于文本分类的 Hierarchical Attention论文。我发现的挑战之一是如何管理优化器对网络权重的批处理和更新。该网络的架构由两个依次堆叠的编码器组成:一个句子编码器和一个文档编码器。
当数据集由大型文档组成时,会出现以下问题:每次通过文档编码器,您将多次通过句子编码器。当计算损失并且优化器使用计算的梯度来更新网络参数的权重时,我假设句子编码器的权重应该与文档编码器的权重不同地更新。这样做的好策略是什么?该策略如何在诸如Keras
或之类的库中实施Pytorch
?
neural-network - 带注意力的 LSTM
我正在尝试将注意力机制添加到堆叠 LSTM 实现https://github.com/salesforce/awd-lstm-lm
所有在线示例都使用编码器-解码器架构,我不想使用(我是否必须使用注意力机制?)。
这个模型正在训练,但与没有注意模型的模型相比,我的损失相当高。
python - PyTorch:如何实现图注意力层的注意力
我已经实现了https://arxiv.org/pdf/1710.10903.pdf的注意力(方程式 1),但它显然不是内存效率,并且只能在我的 GPU 上运行一个模型(需要 7-10GB)。
目前,我有
我计算所有 e_ij 项的见解是
在 [9] 中:将 numpy 导入为 np
在 [10] 中: h = torch.LongTensor(np.array([[1,1], [2,2], [3,3]]))
在[11]中:N=3
在 [12] 中:h.repeat(1, N).view(N * N, -1) 出[12]:
[torch.LongTensor 大小为 9x2]
在 [13] 中:h.repeat(N, 1) 出 [13]:
[torch.LongTensor 大小为 9x2]
最后连接 hs 和 feed 矩阵 a。
有没有办法以更记忆友好的方式做到这一点?
tensorflow - 是否应该对可变长度序列上的 RNN 注意力权重进行重新归一化以“掩盖”零填充的影响?
为了清楚起见,我指的是用于文档分类的分层注意网络中描述的类型的“自我注意”,并在许多地方实现,例如:here。我指的不是编码器-解码器模型(即 Bahdanau)中使用的 seq2seq 类型的注意力,尽管我的问题也可能适用于此......我只是不太熟悉它。
Self-attention 基本上只是计算 RNN 隐藏状态的加权平均值(均值池的泛化,即未加权平均值)。当同一批次中有可变长度序列时,通常会将它们补零到批次中最长序列的长度(如果使用动态 RNN)。当为每个序列计算注意力权重时,最后一步是 softmax,因此注意力权重总和为 1。
然而,在我看到的每一个注意力实现中,都没有注意掩盖或取消零填充对注意力权重的影响。这对我来说似乎是错误的,但我担心我可能遗漏了一些东西,因为似乎没有其他人对此感到困扰。
例如,考虑一个长度为 2、零填充到长度 5 的序列。最终,这导致注意力权重被计算为类似的 0 填充向量的 softmax,例如:
权重 = softmax([0.1, 0.2, 0, 0, 0]) = [0.20, 0.23, 0.19, 0.19, 0.19]
并且因为 exp(0)=1,零填充实际上“淡化”了注意力权重。这可以很容易地修复,在 softmax 操作之后,通过将权重与二进制掩码相乘,即
掩码 = [1, 1, 0, 0, 0]
然后将权重重新归一化,使其总和为 1。这将导致:
权重 = [0.48, 0.52, 0, 0, 0]
当我这样做时,我几乎总是看到性能提升(在我的模型的准确性方面——我正在做文档分类/回归)。那么为什么没有人这样做呢?
有一段时间我认为,也许所有重要的是注意力权重的相对值(即比率),因为梯度无论如何都不会通过零填充。但是,如果归一化无关紧要,我们为什么要使用 softmax,而不是仅仅使用 exp(.)?(另外,这并不能解释性能提升......)
tensorflow - 在自定义数据集上训练 tensorflow attention-ocr 的管道是什么?
我在stackoverflow上阅读了一些关于attention-ocr的问题,其中大部分是关于特定步骤的实现细节。我想知道的是我们在自己的数据集上微调这个模型的管道。
据我所知,步骤应该是:
0)我们应该先下载FSNS数据集吗?我试图绕过这一步并尝试仅在一张图像上运行推理,但它总是给我错误:“ImportError: No module named 'fsns”。所以我想知道一旦我设置了自己的数据集,这个错误是否会消失。
1) 以与 FSNS 相同的格式存储我们的数据。(本主题链接:如何创建与FSNS数据集格式相同的数据集?</a>,如何为google tensorflow attention ocr创建自定义数据集?)
2)下载预训练的检查点(http://download.tensorflow.org/models/attention_ocr_2017_08_09.tar.gz)
3)以某种方式修改“model.py”以适合您自己的目的。
4)以某种方式修改“train.py”以使用 tensorflow 服务训练您自己的模块。
我现在仍处于这个项目的早期阶段(创建自己的数据集),并且对如何做以及下一阶段是什么感到困惑。
python - 无法将 LuongAttention 转换为张量或操作
我尝试按照教程https://www.tensorflow.org/tutorials/seq2seq在 tensorflow 中实现编码器-解码器模型 我做了一个简单的编码器-解码器模型
它有效。我想为解码器添加注意力机制。
但是当我跑步时
outs = sess.run(attention_mechanism, feed_dict={ inputs: x, decoder_inputs: y, }) 我得到了错误
TypeError:无法将 LuongAttention 转换为张量或操作。我检查了注意力状态。它是一个形状为 (10, 155, 512) 的张量。p.gru_units 是等于 512 的整数。我不明白什么不能转换成张量。提前致谢。
tensorflow - 关注 LSTM Keras
我正在使用 Keras 训练一个 LSTM 模型,并希望在其上添加 Attention。我是 Keras 的新手,注意。来自链接How to add an attention mechanism in keras? 我学会了如何在我的 LSTM 层上增加注意力并制作了这样的模型
输出将是 0/1 的情绪分析。为此,我添加了一个
让它给出一个二进制结果。
这是我们在运行代码时遇到的错误:
你能看看并告诉我们我们在这里做错了什么吗?