pytorch模型的保存与加载,pytorch数据加载
1.在以在模型中使用数据加载器为目的的深度学习中,数据量通常非常大,大量的数据无法同时在模型中向前计算和向后传播。通常对整个数据进行随机置乱,在逐个批处理的同时对数据进行预处理。
2.Dataset类介绍2.1Dataset基类在torch中,提供了datasets的基类torch.utils.data.Dataset,继承这个基类可以快速实现数据加载。
torch.utils.data.Dataset的源代码如下:
class dataset(object): anabstractclassrepresentaingdataset . allotherdatasetsshouldsubclassessshouldshowdataset,和``__getitem__ `,支持整数索引范围从0到len (self) Exclus项索引(:RaiseMentioned Error Def _ len _(self):raisementederrordef _ _ add _)self,ottimplementer otelf other])可以看出,定制的dataset类必须继承Dataset类,必须实现两个方法。
__len__方法可以使用全局len()方法来获取其中的元素个数。
__getitem__方法。例如,可以通过传递索引来检索数据,比如从dataset[i]中检索第I个数据。
2.2使用数据集作为数据加载用例的示例来加载数据。
数据来源:UCI machine learning Repository 3360 SMSSPAMCollectionDataSet
数据简介:垃圾短信收集是一组用于识别垃圾邮件的典型数据集,完全来自实际邮件内容,包含4831封普通邮件和747封垃圾邮件。普通邮件和垃圾邮件存储在一个文本文件中,每行完整记录一封邮件的内容,每行开头使用ham和spam来区分普通邮件和垃圾邮件。内容如下。
首先,实现dataset类。
importtorchfromthorch . utils . dataimportdatasetdata _ path=r d: My Documents 马岱 python py torch mnist Post-mail特殊含义#数据集classmydataset (dataset)的索引:def _ init _(self):self . lines=open(data _ path,complete encoding= encoding)): #索引中相应位置的一段数据返回self.lines [index]。strip (# newline def _ len _ (sstrip
然后,您可以实例化数据集并重复获取其中的数据。
if _ name _= _ main _ :my _ dataset=my dataset(for iinrange(4):print)my _ dataset)。
此时,标签的内容和文本没有分开,所以修改__getitem方法。
def_getitem_(self,index):cur _ line=self . lines[index]。strip ) label=cur_line[:4].
3.迭代数据集可以通过上述方法读取数据,但其中许多方法尚未实现。
pytorch中的“批处理数据”和“混排数据”,使用多线程、多线程和多处理并行加载数据,torch.utils.data
示例:
importtorchfromforce . utils . dataimportdataloader,dataset data _ path=r d: my documents 马岱python Py tororath后面是特殊含义# dataset class my dataset(dataset):def _ _ init _(self):self . lines=open)data _ path,和encode index) 3360cur _ line=self。线条[索引]。strip (label=cur _ line [:4]。strip) content=cur _ line content返回数据返回的总数len(self . lines)my _ dataset=my dataset)data _ loader=dataser shuffle=true,num _ workers=2(im)
数据集:预定义的数据集实例;Batch_size:输入数据的批量大小,常用128、256等。Shuffle:bool类型,表示每次采集数据时是否提前洗牌;Num_workers:加载数据的线程数。输出的一些结果如下
当然,在遍历的过程中,enumerate关键字可以将对象组合成一个序列和索引,从而同时检索索引和索引值。如果你需要打印数据的长度,使用ceil函数。将指定的值转换为等于或大于最小整数。
foriienumerate(data _ loader):
是打印(一)