engs = [’go .’, "i lost .", ’he\’s calm .’, ’i\’m home .’] fras = [’va !’, ’j\’ai perdu .’, ’il est calme .’, ’je suis chez moi .’] for eng, fra in zip(engs, fras): translation, dec_attention_weight_seq = d2l.predict_seq2seq(net, eng, src_vocab, tgt_vocab, num_ steps, device, True) print(f’{eng} => {translation}, ’,f’bleu {d2l.bleu(translation, fra, k=2):.3f}’) go . => va !, bleu 1.000 i lost . => j’ai perdu ., bleu 1.000 he’s calm . => il est calme ., bleu 1.000 i’m home . => je suis chez moi ., bleu 1.000 enc_attention_weights = torch.cat(net.encoder.attention_weights, 0).reshape((num_layers, num_heads, -1, num_steps)) enc_attention_weights.shape torch.Size([2, 4, 10, 10])
时间: 2023-11-02 14:06:26 浏览: 98
这段代码用于进行机器翻译的预测并计算BLEU分数。首先,定义了英文句子列表`engs`和法文句子列表`fras`。然后,使用`zip`函数将两个列表进行配对,并遍历每个配对的句子。
在循环中,调用`d2l.predict_seq2seq`函数对每个英文句子进行预测翻译。该函数会返回翻译结果和解码器的注意力权重序列。然后,打印出英文句子、翻译结果和使用BLEU分数衡量的翻译准确度。其中,BLEU分数的计算使用了`d2l.bleu`函数,并指定了BLEU的n-gram参数k为2。
接下来,将编码器的注意力权重序列连接起来,并重新整形张量以得到编码器的注意力权重的形状。最后,打印出编码器的注意力权重的形状,为(torch.Size([2, 4, 10, 10]))。其中,2表示两个隐藏层,4表示四个注意力头部,10表示编码器的时间步数(输入序列长度加上起始和结束标记)。
阅读全文