文章目录
1. 第一种方法(调用Dataset类,直接加载所有的数据):使用Pytorch的Dataset类来构建数据集,再使用Data.DataLoader()来加载数据集
使用到Pytorch中的:TORCH.UTILS.DATA.DATASET
1. 通过继承Dataset类来构建数据集
from torch.utils.data import Dataset
# TORCH.UTILS.DATA.DATASET
# 1. 图片的路径和标签信息存储在一个txt中
# 2. 将这些信息转化为list,该list每一个元素对应一个样本
# 3. 通过getitem函数,读取数据和标签,并返回数据和标签
class myData(Dataset): # from torch.utils.data import Dataset
def __init__(self):
initDataDir = "initData" # 保存所有数据的路径
self.all_data = [] # 存放所有的数据
files = os.listdir(initDataDir)
for file in files:
df = pd.read_excel(os.path.join(initDataDir, file))
col_names = df.columns.values.tolist() # 获取列的名字
for i in range(0, len(df)): # 遍历每一行的数据
self.all_data.append([df.iloc[i][col_names[0]], df.iloc[i][col_names[1]]]) # 将一个样本和label为一组存放进去
# torch.tensor(self.all_data)
def __getitem__(self, index):
"""
# 已知样本index,返回样本的值(样本和样本label)。
# 通常是根据读取一个存放了 样本路径和标签信息的txt文档获得具体的数据。
:param index: 样本的index
:return: 样本,label
"""
return self.all_data[index][0], self.all_data[index][1]
def __len__(self): # 返回所有样本的数目
return len(self.all_data)
2. 先实例化,再使用Data.DataLoader()来加载数据集
# 使用标准类来构造数据 加载数据
myDataSet = myData() # 实例化自己构建的数据集
train_loader = Data.DataLoader(dataset=myDataSet, batch_size=BATCH_SIZE, shuffle=False)
2. 第二种方法(现将数据集分开,再加载其中的训练数据):先使用Data.TensorDataset(X_train, y_train)构造数据集,再使用Data.DataLoader()来加载数据集
1. 读取所有的数据集
class allData(): # from torch.utils.data import Dataset
def __init__(self):
self.all_data = [] # 存放所有的数据
self.all_data_x = [] # 存放所有的数据
self.all_data_y = [] # 存放所有的数据
initDataDir = "initData" # 保存所有数据的路
files = os.listdir(initDataDir)
for file in files:
df = pd.read_excel(os.path.join(initDataDir, file))
col_names = df.columns.values.tolist() # 获取列的名字
for i in range(0, len(df)): # 遍历每一行的数据
self.all_data_x.append(df.iloc[i][col_names[1]])
self.all_data_y.append(df.iloc[i][col_names[2]])
# torch.tensor(self.all_data)
def getX(self):
# return self.all_data_x
return torch.unsqueeze(torch.Tensor(self.all_data_x), dim=1)
def getY(self):
# return self.all_data_y
return torch.unsqueeze(torch.Tensor(self.all_data_y), dim=1)
2. 使用train_test_split()将数据集拆分成训练和测试数据集
import torch
import torch.utils.data as Data
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X.numpy(), y.numpy(), test_size=0.8) # split输入的数据集必须转换成numpy类型(只能处理numpy类型的数据)
X_train = torch.from_numpy(X_train) # numpy 转成 torch 类型
X_test = torch.from_numpy(X_test)
y_train = torch.from_numpy(y_train)
y_test = torch.from_numpy(y_test)
3. 先使用Data.TensorDataset(X_train, y_train) 封装起来,再使用Data.DataLoader()调用。
torch_dataset = Data.TensorDataset(X_train, y_train) # 训练的数据集
train_loader = Data.DataLoader(dataset=torch_dataset, batch_size=BATCH_SIZE, shuffle=False)
3. 最后,如何使用处理好的train_loader数据集
for step, (b_x, b_y) in enumerate(train_loader):
数据集会按照 Data.DataLoader() 一个BATCH_SIZE一组的加载完所有的数据集。
step 是 0 1 2 ……编号一样的东西(通常不使用)
b_x 是数据
b_y 是对应的标签
2019年4月21日21:56:12
END