指路☞ 《PyTorch深度学习实践》完结合集_哔哩哔哩_bilibili
知识补充:
1、pytorch神经网络模型
2、类后面加括号,表示构造对象;Linear的对象里面包含w和b,将来我们可以直接用Linear来完成wx+b的运算,Linear也可以自动backward,self.linear是个对象。
3、新版criterion
4、遇到最sb的bug:libpng warning: iCCP: cHRM chunk does not match sRGB
它是时不时抽风,解决方法竟然是Ctrl+shift 切换输入法,即把QQ输入法切换掉(我的已经改了,它现在不显示了)
Python 的 libpng warning: iCCP: cHRM chunk does not match sRGB 报错处理_秋末雨微凉的博客-CSDN博客
****************************************************************************************************
import torch
import matplotlib.pyplot as plt
x_data = torch.Tensor([[1.0], [2.0], [3.0]])
y_data = torch.Tensor([[2.0], [4.0], [6.0]])
#module会自动backward
class LinearModel(torch.nn.Module):
def __init__(self):
super(LinearModel, self).__init__()
self.linear = torch.nn.Linear(1, 1)
#(1,1)代表x,y的列数
def forward(self, x):
#对象后面加括号表示可调用
y_p = self.linear(x)
return y_p
#model是可调用模型
model = LinearModel()
#它计算的就是(y_p -y)**2,size_average = False 表示不用再除以N了
criterion = torch.nn.MSELoss(reduction = 'sum')
"""
#优化器,SGD是类,parameters会检查model里面所有的成员,如果成员里有权重
就会把这些权重都加到你要训练的结果上
lr是学习率α
optimizer优化对象
"""
optimizer = torch.optim.SGD(model.parameters(), lr = 0.01)
epoch_list = []
loss_list = []
for epoch in range(100):
y_p = model(x_data)
loss = criterion(y_p, y_data)
#loss是标量
print("Epoch=", epoch, 'Loss=', loss.item())
#所有权重归零
optimizer.zero_grad()
#反向传播
loss.backward()
#权重更新
optimizer.step()
epoch_list.append(epoch)
loss_list.append(loss)
print('w =', model.linear.weight.item())
print('b =', model.linear.bias.item())
x_test = torch.Tensor([4.0])
y_test = model(x_test)
print('y_p =', y_test.data)
plt.plot(epoch_list, loss_list)
plt.title('SGD')
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.show()
部分结果如下:为了让图片更直观,我只进行了100次
***********************************************************************************************************