pytorch学习记录(持续更新)

关键字及方法汇总表

pytorch学习记录(持续更新)_第1张图片

 pytorch学习记录(持续更新)_第2张图片

------------------------------------分割线------------------------------------

卷积层:提取图像特征

池化层:对提取的卷积层信息进行数据处理,减小图像尺寸数据量,加快训练速度

线性层:对平铺数据进行提取

------------------------------------分割线------------------------------------

一般训练模型模板

1.准备数据集                Datasets

2.数据集数据导入          DataLoader

3.创建网络模型,并实例化模型

4.创建损失函数             Loss_fn = nn.CrossEntropyLoss( ) 交叉商损失函数

5.创建优化器函数         Optimizer = torch.optim.SGD( ) 随机梯度下降优化器

6.设置训练中的一些参数(训练次数、训练轮次等)

7.进入训练状态

8.开始训练循环

        (1)取数据

        (2)输入数据经过网络模型变换

        (3)误差计算

        (4)优化模型

        (5)测试数据

        (6)模型保存

9.训练完成

~~~~~~~~~~~~~~~~~~~~~~~~~

相关模板代码如下:

import torch
import torchvision
from torch.utils.tensorboard import SummaryWriter

from module import *
from torch.utils.data import DataLoader


train_dataset = torchvision.datasets.CIFAR10(r"D:\lr\program\lrpro_learning\dataset20220526", train=True,
                                             transform=torchvision.transforms.ToTensor())
test_dataset = torchvision.datasets.CIFAR10(r"D:\lr\program\lrpro_learning\dataset20220526", train=False,
                                             transform=torchvision.transforms.ToTensor())

train_dataloader = DataLoader(train_dataset, batch_size=64)
test_dataloader = DataLoader(test_dataset, batch_size=64)

train_dataset_len = len(train_dataset)
test_dataset_len = len(test_dataset)

print("训练数据集长度为:{}".format(train_dataset_len))
print("测试训练集长度为:{}".format(test_dataset_len))

writer = SummaryWriter("logs_train")

#创建神经网络模型
New_nn = nn_Train()

#创建损失函数(交叉商)
loss_fn = nn.CrossEntropyLoss()

#优化器(随机梯度下降)
learning_rate = 1e-2
optimizer = torch.optim.SGD(New_nn.parameters(), lr=learning_rate)



#设置训练网络的一些参数
#训练轮次
epoch = 10
#记录训练次数
total_train_step = 0
#记录测试次数
total_test_step = 0

for i in range(epoch):
    print("=========第{}轮训练开始=========".format(i+1))

    #训练开始
    New_nn.train()
    for data in train_dataloader:
        imgs, targets = data
        output = New_nn(imgs)
        loss = loss_fn(output, targets)

        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

        total_train_step += 1
        if total_train_step % 100 == 0:
            print("训练次数:{} ,Loss:{}".format(total_train_step, loss.item()))
            writer.add_scalar("train_notes", loss.item(), total_train_step)

    #测试步骤开始
    total_loss_test = 0
    New_nn.eval()
    #整体正确率
    total_acc = 0
    with torch.no_grad():
        for data in test_dataloader:
            imgs, targets = data
            output = New_nn(imgs)
            loss = loss_fn(output, targets)
            total_loss_test = total_loss_test + loss.item()
            # 0为纵向计算最大值,1为横向计算最大值
            accuracy = (output.argmax(1) == targets).sum()
            total_acc = total_acc + accuracy

    print("整体测试集体上的Loss:{}".format(total_loss_test))
    print("整体测试集上的正确率:{}".format(total_acc/test_dataset_len))
    writer.add_scalar("test_notes", total_loss_test, total_test_step)
    writer.add_scalar("test_acc", total_acc/test_dataset_len, total_test_step)
    total_test_step += 1

    torch.save(New_nn, "new_nn_{}.pth".format(i))
    print("***模型已保存***")

writer.close()

以上为个人学习笔记,如有不对的地方请指正。谢谢orz

你可能感兴趣的:(机器视觉,pytorch学习记录,pytorch,学习,人工智能)