pytorch实践05(刘二大人)

B站刘二大人视频第五讲对比前几讲的内容只是在前几讲的基础上使用了pytorch框架来实现线性模型,并没有做更多的理论上的更新,使用pytorch框架构建模型训练主要分为4大部分:如下图:

pytorch实践05(刘二大人)_第1张图片

第一部分:

准备数据集,这是我们构建神经网络模型的第一步,本节的数据集仍然是采用之前刘老师在视频中一直所使用的学习时长数据集,更多复杂的数据集使用,刘老师说会在后面的视频中详细跟大家 说。

第二部分:

设计模型,关于设计模型的主要是使用面向对象编程,通过继承父类torch.nn.Module,来实现我们自己的模型设计具体代码会在下面展示。

第三部分:

构建损失函数和优化器,本节所构建的损失函数和优化器仍然与前面几节相同,用的是最小均方误差(MSE)和随机梯度下降(SGD),不同点在于本节要是用pytorch 的工具来表示。

第四部分:

循环训练,主要包括前馈传播,反向传播以及更新。

本节的源代码如下:(我这里的学习率设置的为0.001,而视频中刘老师设置的为0.01)


import torch
import numpy as np
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]])

#构建模型
class LinearModel(torch.nn.Module):
    def __init__(self):
        #继承父类
        super(LinearModel,self).__init__()
        #in_features和out_features分别为输入维度和输出维度
        self.linear = torch.nn.Linear(in_features=1,out_features=1)

    #重新定义前馈传播
    def forward(self,x):
        y_pred = self.linear(x)
        return y_pred

model = LinearModel()

#构造损失函数和优化器
#size_average表示是不是将损失函数之和除N
Loss = torch.nn.MSELoss(size_average=False)
#model.parameters会自动帮我们检索可以求梯度的参数,lr为学习率
Optim = torch.optim.SGD(model.parameters(),lr=0.001)

#循环训练
loss_list = []
weight_list = []
bias_list = []
for epoch in range(1000):
    #前馈传播
    y_pred = model(x_data)
    loss = Loss(y_pred,y_data)
    print('epoch:',epoch,'loss',loss.item())
    loss_list.append(loss.item())
    weight_list.append(model.linear.weight.item())
    bias_list.append(model.linear.bias.item())
    #梯度清零
    Optim.zero_grad()
    #反向传播
    loss.backward()
    #更新
    Optim.step()

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_pred = ', y_test.data)

#可视化
plt.plot(loss_list,color = (0,0.5,0.5))
plt.xlabel('epoch')
plt.ylabel('loss')
plt.show()
plt.plot(weight_list,color = (0,0.5,0.5))
plt.xlabel('epoch')
plt.ylabel('w')
plt.show()
plt.plot(bias_list,color = (0,0.5,0.5))
plt.xlabel('epoch')
plt.ylabel('b')
plt.show()

可视化结果为:

loss的训练过程:

pytorch实践05(刘二大人)_第2张图片

w随着训练的变化为:

pytorch实践05(刘二大人)_第3张图片 

b随着训练的变化为:

pytorch实践05(刘二大人)_第4张图片 

 本节的课后作业是对比集中不同的优化器的结果对比,例如

torch.optim.Adagrad
torch.optim.Adam
torch.optim.Adamax
torch.optim.ASGD
torch.optim.LBFGS
torch.optim.RMSprop
torch.optim.Rprop
而我也简单的用Adam做了对比:
pytorch实践05(刘二大人)_第5张图片

pytorch实践05(刘二大人)_第6张图片 

pytorch实践05(刘二大人)_第7张图片 

 Adam所用的学习率和SGD相同,但是训练效率来看Adam不如SGD。

你可能感兴趣的:(pytorch,深度学习,机器学习)