定义数据集训练神经网络# https://github.com/PacktPublishing/Modern-Computer-Vision-with-PyTorch
# https://github.com/PacktPublishing/Modern-Computer-Vision-with-PyTorch################### Chapter Two ####################################### #数据集的库 from torch.utils.data import Dataset, DataLoader import torch import torch.nn as nn ######################################################################## x = [[1,2],[3,4],[5,6],[7,8]] y = [[3],[7],[11],[15]]X = torch.tensor(x).float() Y = torch.tensor(y).float() ########################################################################
# 如果有GPU,使用它
device = 'cuda' if torch.cuda.is_available() else 'cpu' X = X.to(device) Y = Y.to(device) print(device) ########################################################################
# 定义我的数据集 class MyDataset(Dataset):def __init__(self,x,y):self.x = x.clone().detach().requires_grad_(True)self.y = y.clone().detach().requires_grad_(False)def __len__(self):return len(self.x)def __getitem__(self, ix):return self.x[ix], self.y[ix] ds = MyDataset(X, Y) # 取出一个样本 print(ds.__getitem__(1)) ######################################################################## dl = DataLoader(ds, batch_size=2, shuffle=True) ######################################################################## # 定义我的神经元网络类 class MyNeuralNet(nn.Module):def __init__(self):super().__init__()self.input_to_hidden_layer = nn.Linear(2,8)self.hidden_layer_activation = nn.ReLU()self.hidden_to_output_layer = nn.Linear(8,1)def forward(self, x):x = self.input_to_hidden_layer(x)x = self.hidden_layer_activation(x)x = self.hidden_to_output_layer(x)return x ########################################################################
#定义我的神经网络对象、损失函数、优化算法
mynet = MyNeuralNet().to(device) loss_func = nn.MSELoss() from torch.optim import SGD opt = SGD(mynet.parameters(), lr = 0.001)######################################################################## import time loss_history = [] start = time.time() # 训练我的神经网络 for _ in range(50):for data in dl:x, y = dataprint(data)opt.zero_grad()loss_value = loss_func(mynet(x),y)loss_value.backward()opt.step()loss_history.append(loss_value) end = time.time() print(end - start) ######################################################################## val_x = [[7,8]] # 使用我训练好的神经网络,计算一个输入、输出 val_x = torch.tensor(val_x).float().to(device)print(mynet(val_x))