如何用PyTorch在seq2seq模型中对loss进行mask处理?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1082个文字,预计阅读时间需要5分钟。
在PyTorch官方教程中,有一个关于如何对loss进行masking的Chatbot教程。这个教程主要利用seq2seq模型和注意力机制来实现。感觉上,和机器翻译没有太大区别。如果对话中有一句话包含下一句话,那么就将这一对句子加入到模型中进行训练。
如何对loss进行mask
pytorch官方教程中有一个Chatbot教程,就是利用seq2seq和注意力机制实现的,感觉和机器翻译没什么不同啊,如果对话中一句话有下一句,那么就把这一对句子加入模型进行训练。其中在训练阶段,损失函数通常需要进行mask操作,因为一个batch中句子的长度通常是不一样的,一个batch中不足长度的位置需要进行填充(pad)补0,最后生成句子计算loss时需要忽略那些原本是pad的位置的值,即只保留mask中值为1位置的值,忽略值为0位置的值,具体演示如下:
import torch import torch.nn as nn import torch.nn.functional as F import itertools DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu") PAD_token = 0
首先是pad函数和建立mask矩阵,矩阵的维度应该和目标一致。
本文共计1082个文字,预计阅读时间需要5分钟。
在PyTorch官方教程中,有一个关于如何对loss进行masking的Chatbot教程。这个教程主要利用seq2seq模型和注意力机制来实现。感觉上,和机器翻译没有太大区别。如果对话中有一句话包含下一句话,那么就将这一对句子加入到模型中进行训练。
如何对loss进行mask
pytorch官方教程中有一个Chatbot教程,就是利用seq2seq和注意力机制实现的,感觉和机器翻译没什么不同啊,如果对话中一句话有下一句,那么就把这一对句子加入模型进行训练。其中在训练阶段,损失函数通常需要进行mask操作,因为一个batch中句子的长度通常是不一样的,一个batch中不足长度的位置需要进行填充(pad)补0,最后生成句子计算loss时需要忽略那些原本是pad的位置的值,即只保留mask中值为1位置的值,忽略值为0位置的值,具体演示如下:
import torch import torch.nn as nn import torch.nn.functional as F import itertools DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu") PAD_token = 0
首先是pad函数和建立mask矩阵,矩阵的维度应该和目标一致。

