MENU

深度学习笔记(1)

• March 31, 2022 • Read: 3882 • Python,深度学习

Pytorch实现神经网络

1. 数据准备

首先,进行数据的准备,这里主要是指的是测试数据集,输入量依照矩阵的形式进行输入,确定好属性个数以及样本个数。

2. 定义神经网络

设计一个神经网络,即能计算网络的前馈传播,得到的预测值是后续计算梯度的基础。当然定义的时候类是需要继承自pytorch中的nn.Module类,初始化过程一是要继承父类的属性,另外就是需要定义自己的网络,是线性还是其他的,torch.nn.Linear类,定义出层。然后,在各层网络都创建后,需要进行网络的前馈传播计算,即给出一个输入,要能够得到预测值,定义一个实例方法forward,这其中如果需要激活函数那么在这里就可以添加,如果没有则直接线性计算结果输出就行。

3. 定义实例、损失函数和优化器

在创建神经网络后,需要进行实例的创建。接下来要进行损失函数的确定,如线性回归中最常用的MSE,调用torch.nn.MSELoss()进行生成。在上述基础上,要进行神经网络参数的更新计算,那么就需要有一个优化器来完成反向传播时参数的更新。调用torch.optim.SGD()生成一个随机梯度下降算法的优化器。

4. 训练(training cycle)

在上述的对象都创建好的基础上,就要开始进行训练学习,每一次循环称为一个epoch,适当增大epoch值能够得到更好的效果。每一次的循环中需要完成预测值,即输入一个x,那么会产生一个当前的y_pred,然后利用这个pred值,能够计算出损失函数的值是多少,然后调用优化器进行反向传播和梯度归0,从而完成训练。

上述的过程是基本的神经网络建立过程,依照此思路均可以扩展到其他的问题中的网络生成中!

import torch

x_data = torch.Tensor([[1.06], [2.1], [2.96]])
y_data = torch.Tensor([[2.04], [3.98], [6.05]])


class LinearModel(torch.nn.Module):
    def __init__(self):
        super(LinearModel, self).__init__()
        self.linear = torch.nn.Linear(1, 1)

    def forward(self, x):
        y_pred = self.linear(x)
        return y_pred


model = LinearModel()
mseloss = torch.nn.MSELoss(size_average=False)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

for epoch in range(1000):
    y_pred = model(x_data)
    loss = mseloss(y_pred, y_data)
    lo.append(loss.item())
    print(epoch, loss.item())

    optimizer.zero_grad()
    loss.backward()
    optimizer.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)
Archives Tip
QR Code for this page
Tipping QR Code