数据集中 Train 和Test 分开送入网络
1.处理数据集
用class 将数据集中的数据分为训练集和测试集,并用DataLoader打乱顺序,分batch准备喂入网络
2.搭建网络模型
用class搭网络
3.指定优化器和loss计算器
4.训练网络、测试网络
根据视频
import torch
from torch.utils.data import Dataset
from torch.utils.data import DataLoader
import numpy as np
class DiabetesDateset(Dataset):
def __init__(self, filepath):
xy = np.loadtxt(filepath, delimiter=',', dtype=np.float32)
self.len = xy.shape[0]-1
self.x_data = torch.from_numpy(xy[:-1, :-1])
self.y_data = torch.from_numpy(xy[:-1, [-1]])
self.x_test =torch.from_numpy(xy[[-1],:-1])
self.y_test = torch.from_numpy(xy[[-1],[-1]])
def __getitem__(self, index):
return self.x_data[index], self.y_data[index]
def __len__(self):
return self.len
dataset = DiabetesDateset('diabetes.csv.gz')
train_loader = DataLoader(dataset=dataset, batch_size=32, shuffle=True)
class DiabetesModel(torch.nn.Module):
def __init__(self):
super(DiabetesModel,self).__init__()
self.linear1 = torch.nn.Linear(8, 6)
self.linear2 = torch.nn.Linear(6, 4)
self.linear3 = torch.nn.Linear(4, 1)
self.sigmoid = torch.nn.Sigmoid()
def forward(self, x):
x = self.sigmoid(self.linear1(x))
x = self.sigmoid(self.linear2(x))
x = self.sigmoid(self.linear3(x))
return x
model = DiabetesModel()
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):
inputs, labels = data
y_pre = model(inputs)
loss = criterion(y_pre, labels)
print(epoch, i, loss.item())
optimizer.zero_grad()
loss.backward()
optimizer.step()
y_pre = model(dataset.x_test)
print('y_pre=',y_pre.item(),'y_test=',dataset.y_test.item())