Bahdanau 注意力

我的也是,变快了一点点,但是损失上变化不大,GRU换成LSTM之后变化也不大

分享一下笔记 希望对各位有帮助

1 Like

我的方法是,除了改rnn算法为LSTM,再加上改Seq2SeqAttentionDecoder里forward的每一步的query = torch.unsqueeze(hidden_state[-1], dim=1)query=torch.unsqueeze(hidden_state[0][-1], dim=1),其他不变,好像也行,但不太清楚为啥,有人可以解释一下吗。

调用train_seq2seq,出现Y_hat, _ = net(X, dec_input, X_valid_len)
ValueError: too many values to unpack (expected 2)
这个要怎么解呢?

因为LSTM的输入是X和(H_t-1, C_t-1),输出是Out和(H_t, C_t),其中H_t表示t时刻的隐状态,C_t表示t时刻的细胞状态,那么hidden_state[0][-1]其实就是H_t的最后一个,也就是t时刻最后一层的隐状态,还是比较符合这本书的表达的。

是的,代码里是用最终时间步,我还理解了好久说怎么和表述的不一样

缩放点积注意力会训练得更快-----------


这一节的程序在我电脑上跑不通。。。

按照报错删掉两个num_hiddens倒是可以运行了,但会出现warning:Lazy modules are a new feature under heavy development。不知道咋回事。

尽量使用按照课本写的代码来运行吧,d2l库跟书的中文版上的代码不太一致

for we have used the last layer’s hidden state at last time step which has the shape (num_layers, batch_size,num_hiddens) as the query; and for the same reason with keys, values, which has the feature dimension of num_hiddens

LSTM+attention


貌似LSTM更快

为什么会出现这样的报错呢,我实例化additiveattention没问题,但是在这里面就是会报错