前言
b站刘洪普老师的pytorch入门课笔记。记录学习。
本文内容为数据集的加载器示例。
Mini-Batch中常见的词汇:
1、Epoch:训练阶段一次前馈和方向传播
2、Batch-size:训练阶段一次前向和方向传播的训练样本的数量
3、Iteration:假设样本总数为1w,Batch-size为1000,那么Iteration = 10000/1000 = 10
import torch
from torch.utils.data import Dataset #Dataset是一个抽象类,不能实例化
from torch.utils.data import DataLoader#而DataLoader则可以实例化
class DiabetesDataset(Dataset):
def _init_(self,filepath):
xy = np.loadtxt(filepath,delimiter=',',dtype = np.float32)
self.len = xy.shape[0]
self.x_data = torch.from_numpy(xy[:,:-1])
self.y_data = torch.from_numpy(xy[:,[-1]])
def __getitem__(self, index):
return self.x_data[index],self.y_data[index]
def __len__(self):
return self.len
dataset = DiabetesDataset('diabetes.csv.ga')
train_loader = DataLoader(dataset = dataset,
batch_size = 32,
shuffle = True,
num_workers=2)
class Model(torch.nn.Module):
def __init__(self):
super(Model,self).__init__()
#self.linear = torch.nn.Linear(8,1) #直接8维输入,1维输出的二分类模型 对应的w为8*1的向量。
self.linear1 = torch.nn.Linear(8,6)
self.linear2 = torch.nn.Linear(6,4)
self.linear3 = torch.nn.Linear(4,1) #从8->4->1维
self.sigmoid = torch.nn.Sigmoid() #这里的激活函数可以选择很多,也可以用Sign()、Linear()、ReLU()等。 要改成:self.activate = torch.nn.ReLU().
def forward(self, x):
# x = self.sigmoid(self.linear(x)) #直接输入8->1
x = self.sigmoid(self.linear1(x))
x = self.sigmoid(self.linear2(x))
x = self.sigmoid(self.linear3(x))
return x
model = Model()
criterion = torch.nn.BCELoss(size_average=True)
optimizer = torch.optim.SGD(model.parameters(),lr=0.01)
if _name_ == '_main_':
for epoch in range(100):
for i,data in enumerate(train_loader,0): #这里的0表示从下标0开始训练
#.准备数据 ,inputs相当于x,labels相当于y
inputs,labels = data
#.forward
y_pred = model(inputs)
loss = criterion(y_pred,labels)
print(epoch,i,loss.item())
#.backward
optimizer.zero_grad()
loss.backward()
#.update
optimizer.step()