pytorch深度学习基础快速入门7:完整模型训练套路

pytorch深度学习基础快速入门7:完整模型训练套路_第1张图片

1.构建一个model,可以通过main进行验证

pytorch深度学习基础快速入门7:完整模型训练套路_第2张图片
因此在训练文件中要引入model(model和train文件一定要在一个文件夹下)
pytorch深度学习基础快速入门7:完整模型训练套路_第3张图片
pytorch深度学习基础快速入门7:完整模型训练套路_第4张图片

pytorch深度学习基础快速入门7:完整模型训练套路_第5张图片

如何知道模型是否训练好?

-----------------测试数据集评估(不需要调优)
pytorch深度学习基础快速入门7:完整模型训练套路_第6张图片
加限制条件(避免无用信息)
pytorch深度学习基础快速入门7:完整模型训练套路_第7张图片
优化:tensorboard进行画图
pytorch深度学习基础快速入门7:完整模型训练套路_第8张图片
pytorch深度学习基础快速入门7:完整模型训练套路_第9张图片
pytorch深度学习基础快速入门7:完整模型训练套路_第10张图片
pytorch深度学习基础快速入门7:完整模型训练套路_第11张图片
pytorch深度学习基础快速入门7:完整模型训练套路_第12张图片
输出1,1(横着看)
计算对应位置正确的个数:
pytorch深度学习基础快速入门7:完整模型训练套路_第13张图片

2.优化(加上正确率)

pytorch深度学习基础快速入门7:完整模型训练套路_第14张图片

3.细节优化

pytorch深度学习基础快速入门7:完整模型训练套路_第15张图片
57:
74:
网络层中是否有特殊层
在这里插入图片描述
在这里插入图片描述

4.总结

顺序:

  1. 准备数据集
  2. 准备对应的dataloader
  3. 创建网络模型
  4. 创建损失函数
  5. 优化器
  6. 设置训练中参数
  7. 训练状态(取数据,误差,优化,输出)
  8. 测试状态(梯度都没有时:取数据,误差,特殊指标)
  9. 保存模型

5.具体代码及注释

# -*- coding: utf-8 -*-
# 作者:小土堆
# 公众号:土堆碎念

import torchvision
from torch.utils.tensorboard import SummaryWriter

from model import *
# 准备数据集
from torch import nn
from torch.utils.data import DataLoader

train_data = torchvision.datasets.CIFAR10(root="../data", train=True, transform=torchvision.transforms.ToTensor(),
                                          download=True)
test_data = torchvision.datasets.CIFAR10(root="../data", train=False, transform=torchvision.transforms.ToTensor(),
                                         download=True)

# length 长度
train_data_size = len(train_data)
test_data_size = len(test_data)
# 如果train_data_size=10, 训练数据集的长度为:10
print("训练数据集的长度为:{}".format(train_data_size))
print("测试数据集的长度为:{}".format(test_data_size))


# 利用 DataLoader 来加载数据集
train_dataloader = DataLoader(train_data, batch_size=64)
test_dataloader = DataLoader(test_data, batch_size=64)

# 创建网络模型
tudui = Tudui()

# 损失函数
loss_fn = nn.CrossEntropyLoss()

# 优化器
# learning_rate = 0.01
# 1e-2=1 x (10)^(-2) = 1 /100 = 0.01
learning_rate = 1e-2
optimizer = torch.optim.SGD(tudui.parameters(), lr=learning_rate)

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

# 添加tensorboard
writer = SummaryWriter("../logs_train")

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

    # 训练步骤开始
    tudui.train()
    for data in train_dataloader:
        imgs, targets = data
        outputs = tudui(imgs)
        loss = loss_fn(outputs, targets)

        # 优化器优化模型
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

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

    # 测试步骤开始
    tudui.eval()
    total_test_loss = 0
    total_accuracy = 0
    with torch.no_grad():
        for data in test_dataloader:
            imgs, targets = data
            outputs = tudui(imgs)
            loss = loss_fn(outputs, targets)
            total_test_loss = total_test_loss + loss.item()
            accuracy = (outputs.argmax(1) == targets).sum()
            total_accuracy = total_accuracy + accuracy

    print("整体测试集上的Loss: {}".format(total_test_loss))
    print("整体测试集上的正确率: {}".format(total_accuracy/test_data_size))
    writer.add_scalar("test_loss", total_test_loss, total_test_step)
    writer.add_scalar("test_accuracy", total_accuracy/test_data_size, total_test_step)
    total_test_step = total_test_step + 1

    torch.save(tudui, "tudui_{}.pth".format(i))
    print("模型已保存")

writer.close()

6.具体实例

pytorch深度学习基础快速入门7:完整模型训练套路_第16张图片
网络模型
pytorch深度学习基础快速入门7:完整模型训练套路_第17张图片
加载网络模型
pytorch深度学习基础快速入门7:完整模型训练套路_第18张图片
预测最大结果:
pytorch深度学习基础快速入门7:完整模型训练套路_第19张图片
pytorch深度学习基础快速入门7:完整模型训练套路_第20张图片

在这里插入图片描述
pytorch深度学习基础快速入门7:完整模型训练套路_第21张图片

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