学习log4|神经网络预测的基本流程--附pytorch代码和基

2023-10-30  本文已影响0人  小周的万用胶囊

此前在疫情期间学习了AI的经典算法理论,但一直没有机会实战敲敲代码,总感觉有遗憾,现在抓紧时间实战一下!下面的笔记其实就是的pytorch官方学习代码加上个人的理解,代码已经试运行过了,边做边学吧。

1、模型是如何学习的

import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = nn.Conv2d(3, 6, 5)
        self.pool = nn.MaxPool2d(2, 2)
        self.conv2 = nn.Conv2d(6, 16, 5)
        self.fc1 = nn.Linear(16 * 5 * 5, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):
        x = self.pool(F.relu(self.conv1(x)))
        x = self.pool(F.relu(self.conv2(x)))
        x = torch.flatten(x, 1) # flatten all dimensions except batch
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x


net = Net()

👇: pytorch实现模型训练的代码,注意的点:每一次反向学习的计算前都需要对梯度进行清零,否则会引起梯度爆炸和梯度消失的问题,也即每次学习到更新了的状态会被推翻,模型状态变得跟薛定谔的猫一样飘忽不定,也即训练会没有效果。

for epoch in range(2):  # loop over the dataset multiple times

    running_loss = 0.0
    for i, data in enumerate(trainloader, 0):
        # get the inputs; data is a list of [inputs, labels]
        inputs, labels = data

        # zero the parameter gradients
        optimizer.zero_grad()    #清除前一次训练的梯度

        # forward + backward + optimize
        outputs = net(inputs) #这里就是正反馈学习
        loss = criterion(outputs, labels)
        loss.backward()   #负反馈
        optimizer.step()

        # print statistics
        running_loss += loss.item()
        if i % 2000 == 1999:    # print every 2000 mini-batches
            print(f'[{epoch + 1}, {i + 1:5d}] loss: {running_loss / 2000:.3f}')
            running_loss = 0.0

print('Finished Training')

2、模型的训练过程(此处包含我个人不成熟的案例解说)

模型训练步骤通常包含下面的模块

总结

本篇笔记记录一个神经网络的基本训练路线,代码中包含了网络的构建,学习(训练)的过程。

ps: 上述的个人理解不一定正确,有误请在评论区指出/(ㄒoㄒ)/~~


参考
浅显易懂的池化层解释

上一篇 下一篇

猜你喜欢

热点阅读