python-pytorch編寫transformer模型實現問答0.5.00--訓練和預測
- 背景
- 代碼
- 訓練
- 預測
- 效果
背景
代碼寫不了這么長,接上一篇
https://blog.csdn.net/m0_60688978/article/details/139360270
代碼
# 定義解碼器類
n_layers = 6 # 設置 Decoder 的層數
class Decoder(nn.Module):def __init__(self, corpus):super(Decoder, self).__init__()self.tgt_emb = nn.Embedding(vocab_size, d_embedding) # 詞嵌入層self.pos_emb = nn.Embedding.from_pretrained( \get_sin_enc_table(vocab_size+1, d_embedding), freeze=True) # 位置嵌入層 self.layers = nn.ModuleList([DecoderLayer() for _ in range(n_layers)]) # 疊加多層def forward(self, dec_inputs, enc_inputs, enc_outputs): #------------------------- 維度信息 --------------------------------# dec_inputs 的維度是 [batch_size, target_len]# enc_inputs 的維度是 [batch_size, source_len]# enc_outputs 的維度是 [batch_size, source_len, embedding_dim]#----------------------------------------------------------------- # 創建一個從 1 到 source_len 的位置索引序列pos_indices = torch.arange(1, dec_inputs.size(1) + 1).unsqueeze(0).to(dec_inputs)#------------------------- 維度信息 --------------------------------# pos_indices 的維度是 [1, target_len]#----------------------------------------------------------------- # 對輸入進行詞嵌入和位置嵌入相加dec_outputs = self.tgt_emb(dec_inputs)