train_loader=DataLoader(dataset=Mydata,batch_size=20,shuffle=True,num_workers=0)
Dataset、Dataloader 简介
Dataset是Pytorch自带的建立自己数据库的一个类,可通过其建立自己的数据库。
Dataloader是Pytorch自带加载自己数据库的一个工具,可通过其加载自建数据库中的数据。
看完这个简介你应该对Dataset、Dateloader有一个基本的了解,下面我们就来谈一谈代码的实现问题。
导入相关的的库
import torch
import torch.nn as nn
from torch.utils.data import DataLoader,Dataset
import numpy as np
import xlrd
Dataset、Dateloader代码实现及详解
对于Dataset,作者是通过定义一个新类别来实现,这个类别主要实现的是三个功能:
1、从Excal(txt)文件中提取所有数据
def __init__(self,filepath):
从Excal中具体实现过程可以借鉴我的前一篇文章
python自动化办公-提取excal表格某列数据
从txt中提取数据则是利用np.loadtxt(filepath,delimiter,dtype)实现
参数详解:
filepath = 文件所在路径
delimiter = 数据间的分隔符
dtype = 将文本中的数据转换成需要的类型
2、创建每一组数据的索引
def __getitem__(self, index):
3、返回所创建数据库的长度
def __len__(self):
建立好这三个功能,一个可以实现加载、索引、确定长度的数据库的新类就建立完成,我们的工作也向前走了一大步。
下面看看从Excal(txt)中提取数据的代码实现:
class Mydataset(Dataset):
def __init__(self,filepath):
datalist=[]
data = xlrd.open_workbook(filepath, encoding_override='utf-8')
table = data.sheets()[0] # 选定表sheet1 或sheet2 0表示sheet1 1表示sheet2
nrows = table.nrows # 获取行号
ncols = table.ncols # 获取列号
'''
def __init__(self,filepath):
xy = np.loadtxt(filepath,delimiter=' ',dtype=np.float)
self.x_data = torch.from_numpy(data_scaler.fit_transform(datalist[:,:-1]))
self.y_data = torch.from_numpy(xy[:,[-1]])
'''
for i in range(0, nrows): # 第0行为表头
alldata = table.row_values(i) # 循环输出excel表中每一行,即所有数据
datalist.append(alldata) # 创建
datalist = np.array(datalist,dtype=np.float32) #将获取的数据全部转换成数组浮点数
self.len = datalist.shape[0]
self.x_data = torch.from_numpy(data_scaler.fit_transform(datalist[:,:-1])) #将特征输入归一化
self.y_data = torch.from_numpy(datalist[:,[-1]])
print("数据已录入")
def __getitem__(self, index):
return self.x_data[index],self.y_data[index]
def __len__(self):
return self.len
Dataloader 参数详解
train_loader=DataLoader(dataset=Mydata,batch_size=20,shuffle=True,num_workers=0)