问题标签 [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.
python - ValueError:尺寸必须相等,但“Attention_0/add”的尺寸必须是 49152 和 64(操作:“Add”)
我想尝试用编码器和注意力解码器替换此 github代码(即 dcrnn_model.py 第 83 行)中的编码和解码器的内容。
这些是编码器-解码器之前的代码:
这是编码器-解码器的原始代码:
我的代码如下:
但是,出现了这样的维度错误:
ValueError:尺寸必须相等,但对于输入形状为 [49152,1,1,207]、[64,1、 1,207]。
python - 张量之间的详尽串联
我正在尝试在张量之间进行详尽的连接。因此,例如,我有张量:
a = torch.randn(3, 512)
我想连接像 concat(t1,t1),concat(t1,t2), concat(t1,t3), concat(t2,t1), concat(t2,t2)....
作为一个天真的解决方案,我使用了for
循环:
问题是每个时代都需要很长时间,而且代码很慢。我尝试了在PyTorch上发布的解决方案:How to implement attention for graph attention layer但这会产生内存错误。
我确信有一种更快的方法,但我无法弄清楚。
python - 如何使用注意力机制在多层双向中操纵编码器状态
我正在实现一个具有多层双向 rnn 和注意力机制的 Seq2Seq 模型,在遵循本教程https://github.com/tensorflow/nmt时,我对如何在双向层之后正确操作 encoder_state 感到困惑。
引用教程“对于多个双向层,我们需要稍微操纵encoder_state,有关更多详细信息,请参见model.py,方法_build_bidirectional_rnn()。” 这是代码的相关部分(https://github.com/tensorflow/nmt/blob/master/nmt/model.py第 770 行):
所以这就是我现在所拥有的:
问题是我收到错误
这对我来说有点道理,因为我们没有包括所有输出层,但(我猜)只包括最后一层。而对于状态,我们实际上是连接所有层。
所以正如我所期待的,当只连接最后一层状态时,如下所示:
它运行没有错误。
据我所知,在将编码器状态传递到注意力层之前,没有任何部分代码会再次转换编码器状态。那么他们的代码是如何工作的呢?更重要的是,我的修复是否破坏了注意力机制的正确行为?
python - 如何使用注意力机制对 RNN 建模以进行非文本分类?
带有注意机制的循环神经网络(RNN)通常用于机器翻译和自然语言处理。在 Python 中,RNN With Attention Mechanism 的实现在机器翻译中非常丰富(例如https://talbaumel.github.io/blog/attention/,但是我想做的是在时间上使用 RNN With Attention Mechanism数据文件(不是任何基于文本/句子的数据)。
我有一个尺寸为 21392 x 1972 的 CSV 文件,我已使用 Pandas 将其转换为 Dataframe。第一列是日期时间格式,最后一列包含我想识别的目标类,如“Class1”、“Class2”、“Class3”等。因此,总共有 21392 行(以 10 分钟为时间步长的数据实例)和 1971 个特征。最后(第 1972 列)是标签列,共有 14 个不同的类。
我已经查看了有关 Keras ( https://medium.com/datalogue/attention-in-keras-1892773a4f22)以及 Tensorflow (在 Tensorflow中可视化注意力激活)的可用实施文档,但他们似乎都没有做什么我想完成。我知道这是一种不寻常的方法,但我想尝试一下并使用注意力机制,因为我的许多特征在数据中可能是多余的。
从现有文献来看,注意力机制在耦合到 RNN 时效果很好。我无法找到任何这样的带有注意力机制的 RNN 实现,它也可以提供可视化。我也无法理解如何将我的数据转换为序列(或列表列表),以便之后我可以将它与 One Hot Encoding 一起使用,以使用带有 Attention 的 RNN。我是使用 Python 以及 Keras/Tensorflow 的新手,并且对将我的数据/类型转换为能够模拟序列分类问题的形式的过程感到非常困惑。我的问题基本上是多类分类,就像通常使用机器学习分类器来预测标签一样,但使用带有注意力的 RNN。在这方面的任何帮助将不胜感激。干杯!
parallel-processing - Pytorch softmax 沿着不同的掩码,没有 for 循环
假设我有一个 vector a
,具有相同长度的索引向量b
。索引范围为0~N-1,对应N组。如何在没有 for 循环的情况下为每个组做 softmax?
我在这里做一些注意力操作。每个组的数字都不相同,因此我无法重塑a
为矩阵并使用dim
标准Softmax()
API。
玩具示例:
我想做softmax之类的
但没有 for 循环来节省时间。
deep-learning - Transformer - Attention is all you need - 编码器解码器交叉注意力
据我了解,每个编码器块都从前一个编码器获取输出,并且输出是序列(又名句子)的参与表示(Z)。我的问题是,最后一个编码器块是如何从 Z 产生 K、V 的(用于解码器的编码器-解码注意力 aublayer)
我们只是从最后一个编码器层获取 Wk 和 Wv 吗?
backpropagation - 注意力模型中的反向传播
我试图弄清楚如何通过缩放点积注意力模型进行反向传播。缩放点生成注意力以 Q(Queries)、K(Keys)、V(Values) 作为输入,并执行以下操作:
注意(Q,K,V) = softmax((Q.transpose(K))/√dk)V
这里 √dk 是比例因子,是一个常数。
这里 Q,K 和 V 是张量。我现在假设 Q=K=V。所以我将公式 (softmax((Q.transpose(Q)))Q) 与 Q 区分开来。我认为答案是:
softmax((Q.transpose(Q))) + Q.derivativeOfSoftmax((Q.transpose(Q))).(2*transpose(Q))
因为我认为 Q.transpose(Q) wrt Q 的导数是 2*Q.transpose(Q)。
考虑到张量演算的规则,这是正确的方法吗?如果不是请告诉我如何进行。
可以参考给定论文中缩放点积注意力的概念: https ://arxiv.org/pdf/1706.03762.pdf
deep-learning - 为什么当论文'Attention is all you need'中的值很大时softmax会得到小的梯度
这是原纸的屏幕:纸的屏幕。我理解论文的意思是当dot-product的值很大时,softmax的梯度会变得很小。
但是,我尝试用交叉熵损失计算softmax的梯度,发现softmax的梯度与传递给softmax的值没有直接关系。
即使单个值很大,当其他值很大时,它仍然可以得到很大的梯度。(对不起,我不知道如何在这里提出计算过程)
tensorflow - 如何预先计算每个输入的掩码并根据此掩码调整权重?
我想提供一个与输入图像大小相同的掩码,并根据此掩码调整从图像中学习到的权重(类似于注意力,但为每个图像输入预先计算)。如何使用 Keras(或 TensorFlow)做到这一点?
deep-learning - 注意力机制真的是注意力还是只是再次回顾记忆?
在阅读注意力机制时,我对注意力一词感到困惑。它与我们通常定义中描述的注意力性质相同吗?