【转载】Pytorch模型实现的四部曲

①准备数据集
每一行为一个样本,前 8 列为输入的 8 个特征维度,最后一列为标签值。
在这里插入图片描述
【转载】Pytorch模型实现的四部曲_第1张图片

②定义模型
对着计算图(可以是脑海里的)转换为代码即可
【转载】Pytorch模型实现的四部曲_第2张图片
③构造损失函数和优化器
跟之前大体没什么区别,这里 loss 取了下平均值,取平均值影响的是学习率,而且由于是 Mini-Batch,结尾部分可能不足 batch size,所以取平均值较好。由于是二分类问题,仍然采用 BCELoss 函数;此处采用随机梯度下降。
【转载】Pytorch模型实现的四部曲_第3张图片

④周期性训练
这一步和之前没什么差别,仍然是前向,后向,更新。这里没有使用 Mini-Batch,仍是整个样本输入进去,DataLoader 时可以选择进行 Mini-Batch 的操作。
【转载】Pytorch模型实现的四部曲_第4张图片
采用不同的激活函数
为了获得更好的性能,我们可以采取不同的激活函数:
【转载】Pytorch模型实现的四部曲_第5张图片
【转载】Pytorch模型实现的四部曲_第6张图片
代码的更改:
只需在自定义的 Model 中将 self.activate 进行替换即可。

self.activate = torch.nn.ReLu()

本节代码:

1. import torch
2. import numpy as np
3. import matplotlib.pyplot as plt
4. 
5. xy = np.loadtxt('diabetes.csv.gz', delimiter=',',dtype=np.float32)
6. 7. x_data = torch.from_numpy(xy[:,:-1])
7. y_data = torch.from_numpy(xy[:,[-1]])#保证是一个矩阵
8. 10. class Model(torch.nn.Module):
9. def __init__(self):
10. super(Model,self).__init__()
11. self.linear1 = torch.nn.Linear(8,6)
12. self.linear2 = torch.nn.Linear(6,4)
13. self.linear3 = torch.nn.Linear(4,1)
14. self.sigmoid = torch.nn.Sigmoid()
15. 18. def forward(self,x):
16. x = self.sigmoid(self.linear1(x))
17. x = self.sigmoid(self.linear2(x))
18. x = self.sigmoid(self.linear3(x))
19. return x
20. 
21. 
22. 
23. model = Model()
24. 
25. criterion = torch.nn.BCELoss(size_average=True)
26. optimizer = torch.optim.SGD(model.parameters(), lr=0.1)
27. costs = []
28. for epoch in range(100):
29. 	#Forward
30. 	y_pred = model(x_data)
31. 	loss = criterion(y_pred, y_data)
32. 	print(epoch, loss.item())
33. 	#Backward
34. 	optimizer.zero_grad()
35. 	loss.backward()
36. 	#Update
37. 	optimizer.step()
38. 	costs.append(loss.data.numpy())
39. 	print("第",epoch,"次迭代,成本值为:", loss.item())
40. plt.plot(np.squeeze(costs))
41. plt.ylabel('cost')
42. plt.xlabel('epoch')
43. plt.title("Learning rate = " + str(0.1))
44. plt.show()

你可能感兴趣的:(pytorch,人工智能,python)