2021SC@SDUSC
通过前几周的学习与分析,完成对Extract.py、Model.py的分析,接下来对my_dataloader.py展开分析。
一、Dataset类和DataLoader类
Dataset类主要是用于原始数据的读取或者基本的数据处理,比如在NLP任务中常常需要把文字转化为对应字典ids,这个步骤就可以放在Dataset中执行。
DataLoader,是进一步对Dataset的处理。Dataset得到的数据集可以理解为"列表",即可以根据index取出某个特定位置的数据。而DataLoder就是把这个Dataset数据集根据设定的batch_size划分成很多个“子数据集”,每个“子数据集”中的元素数量就是batch_size。这样做的原因是若一次性把所有的数据放进模型会导致内存溢出,而且模型的迭代会很慢,故采用划分模式。
Dataset类
实际上,torch包中已经有预定义好的torch.utils.data.Dataset类。故使用时创建一个Dataset类,使用类的继承即可。主要要重写的方法是__init __ (),__ len __ (),__ getitem __()这三个。作用如下。
__init__方法:进行类的初始化,一般是用来读取原始数据。
__getitem__方法:根据下标对每一个数据进行进一步的处理。return:希望通过dataset[index]在数据集中取出的元素。
__len__方法:return:数据集的数量(int) 。
Dataset构建:
from torch.utils.data import Dataset
import torch
def MyTokenizer(sentence):
src_vocab = {
'度':0,'上':1,'世':2,'中':3,
'为':4,'人':5,'伟':6,'你'