完整的训练模型套路

计算数据集的长度:

import torchvision.datasets

# from model import *

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

train_data_size = len(train_data)
print("训练数据集的长度为{}".format(train_data_size))
test_data_size = len(test_data)
print("测试数据集的长度为{}".format(test_data_size))

导入自己创建的网络模型

放在model.py文件中

from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear


class Star(nn.Module):
    def __init__(self):
        super(Star, self).__init__()
        self.conv1 = Conv2d(3,32,5,padding=2)
        self.maxpool1 = MaxPool2d(kernel_size=2)
        self.conv2 = Conv2d(32,32,5,padding=2)
        self.maxpool2 = MaxPool2d(2)
        self.conv3 = Conv2d(32,64,5,padding=2)
        self.maxpool3 = MaxPool2d(kernel_size=2)
        self.flatten = Flatten()
        self.linear1 = Linear(1024,64)
        self.linear2 = Linear(64,10)

    def forward(self,x):
        x = self.conv1(x)
        x = self.maxpool1(x)
        x = self.conv2(x)
        x = self.maxpool2(x)
        x = self.conv3(x)
        x = self.maxpool3(x)
        x = self.flatten(x)
        x = self.linear1(x)
        x = self.linear2(x)
        return x;

完成训练模型套路:

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

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

train_data = torchvision.datasets.CIFAR10("data",train=True,transform=torchvision.transforms.ToTensor(),
                                          download=True)
test_data = torchvision.datasets.CIFAR10("data",train=False,transform=torchvision.transforms.ToTensor(),
                                          download=True)
# 计算数据集的长度
train_data_size = len(train_data)
print("训练数据集的长度为{}".format(train_data_size))
test_data_size = len(test_data)
print("测试数据集的长度为{}".format(test_data_size))

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

# 创建网络模型
star = Star()

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

# 优化器
learning_rate = 1e-2 # 学习效率
optimizer = torch.optim.SGD(star.parameters(),lr=learning_rate)

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

# 添加tensorboard
writer = SummaryWriter("logs")

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

    # 训练步骤开始
    for data in train_dataLoader:
        imgs,targets = data
        output = star(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_loss",loss.item(),total_train_step)

    # 测试步骤开始
    total_test_loss = 0
    total_accuracy = 0
    with torch.no_grad():
        for data in test_dataLoader:
            imgs,targets = data
            output = star(imgs)
            loss =loss_fn(output,targets)
            total_test_loss+=loss.item()
            accuracy = (output.argmax(1) == targets).sum()
            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+=1

        # 保存模型
        torch.save(star,"star_{}.pth".format(i))
        print("模型已保存")
writer.close()

输出:

训练数据集的长度为50000
测试数据集的长度为10000
-----1轮训练开始------
训练次数: 100,Loss: 2.2858290672302246
训练次数: 200,Loss: 2.276827812194824
训练次数: 300,Loss: 2.253441572189331
训练次数: 400,Loss: 2.1805951595306396
训练次数: 500,Loss: 2.054079055786133
训练次数: 600,Loss: 2.0293893814086914
训练次数: 700,Loss: 2.018144369125366
整体测试集上的Loss: 308.84361743927
整体测试集上的正确率: 0.28839999437332153
模型已保存
-----2轮训练开始------
训练次数: 800,Loss: 1.8670440912246704
训练次数: 900,Loss: 1.819075345993042
训练次数: 1000,Loss: 1.9210457801818848
训练次数: 1100,Loss: 1.9304873943328857
训练次数: 1200,Loss: 1.6990232467651367
训练次数: 1300,Loss: 1.6514573097229004
训练次数: 1400,Loss: 1.7423760890960693
训练次数: 1500,Loss: 1.8142921924591064
整体测试集上的Loss: 295.2796456813812
整体测试集上的正确率: 0.3271999955177307
模型已保存
-----3轮训练开始------
训练次数: 1600,Loss: 1.755981683731079
训练次数: 1700,Loss: 1.680658221244812
训练次数: 1800,Loss: 1.979447364807129
训练次数: 1900,Loss: 1.6967699527740479
训练次数: 2000,Loss: 1.8938024044036865
训练次数: 2100,Loss: 1.5263957977294922
训练次数: 2200,Loss: 1.490561842918396
训练次数: 2300,Loss: 1.7993782758712769
整体测试集上的Loss: 255.8873610496521
整体测试集上的正确率: 0.4131999909877777
模型已保存
-----4轮训练开始------
训练次数: 2400,Loss: 1.732068419456482
训练次数: 2500,Loss: 1.3511950969696045
训练次数: 2600,Loss: 1.5903568267822266
训练次数: 2700,Loss: 1.7096952199935913
训练次数: 2800,Loss: 1.500636100769043
训练次数: 2900,Loss: 1.568988561630249
训练次数: 3000,Loss: 1.3403130769729614
训练次数: 3100,Loss: 1.513353943824768
整体测试集上的Loss: 243.57661318778992
整体测试集上的正确率: 0.43970000743865967
模型已保存
-----5轮训练开始------
训练次数: 3200,Loss: 1.358062744140625
训练次数: 3300,Loss: 1.4955847263336182
训练次数: 3400,Loss: 1.4531562328338623
训练次数: 3500,Loss: 1.5202267169952393
训练次数: 3600,Loss: 1.5702762603759766
训练次数: 3700,Loss: 1.3084114789962769
训练次数: 3800,Loss: 1.2705403566360474
训练次数: 3900,Loss: 1.412068247795105
整体测试集上的Loss: 241.26606333255768
整体测试集上的正确率: 0.4429999887943268
模型已保存
-----6轮训练开始------
训练次数: 4000,Loss: 1.403318166732788
训练次数: 4100,Loss: 1.4653968811035156
训练次数: 4200,Loss: 1.5468239784240723
训练次数: 4300,Loss: 1.2155771255493164
训练次数: 4400,Loss: 1.1546664237976074
训练次数: 4500,Loss: 1.3608381748199463
训练次数: 4600,Loss: 1.418605923652649
整体测试集上的Loss: 236.75933349132538
整体测试集上的正确率: 0.45190000534057617
模型已保存
-----7轮训练开始------
训练次数: 4700,Loss: 1.325343132019043
训练次数: 4800,Loss: 1.5531615018844604
训练次数: 4900,Loss: 1.3966069221496582
训练次数: 5000,Loss: 1.424952745437622
训练次数: 5100,Loss: 0.9979093670845032
训练次数: 5200,Loss: 1.2863750457763672
训练次数: 5300,Loss: 1.2153862714767456
训练次数: 5400,Loss: 1.4213290214538574
整体测试集上的Loss: 227.42890906333923
整体测试集上的正确率: 0.474700003862381
模型已保存
-----8轮训练开始------
训练次数: 5500,Loss: 1.2299768924713135
训练次数: 5600,Loss: 1.2557401657104492
训练次数: 5700,Loss: 1.2007120847702026
训练次数: 5800,Loss: 1.2442896366119385
训练次数: 5900,Loss: 1.335084080696106
训练次数: 6000,Loss: 1.520774006843567
训练次数: 6100,Loss: 0.9987801313400269
训练次数: 6200,Loss: 1.127054214477539
整体测试集上的Loss: 217.2725569009781
整体测试集上的正确率: 0.5045999884605408
模型已保存
-----9轮训练开始------
训练次数: 6300,Loss: 1.438193917274475
训练次数: 6400,Loss: 1.1489508152008057
训练次数: 6500,Loss: 1.5383996963500977
训练次数: 6600,Loss: 1.0758497714996338
训练次数: 6700,Loss: 1.0825618505477905
训练次数: 6800,Loss: 1.155655026435852
训练次数: 6900,Loss: 1.0632295608520508
训练次数: 7000,Loss: 0.9303162097930908
整体测试集上的Loss: 205.73804318904877
整体测试集上的正确率: 0.5318999886512756
模型已保存
-----10轮训练开始------
训练次数: 7100,Loss: 1.2414157390594482
训练次数: 7200,Loss: 0.9696831107139587
训练次数: 7300,Loss: 1.1145071983337402
训练次数: 7400,Loss: 0.8399109840393066
训练次数: 7500,Loss: 1.1964867115020752
训练次数: 7600,Loss: 1.2800321578979492
训练次数: 7700,Loss: 0.8725569844245911
训练次数: 7800,Loss: 1.2247275114059448
整体测试集上的Loss: 196.30235558748245
整体测试集上的正确率: 0.555400013923645
模型已保存

tensorboard可视化:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

注意:

1.为了避免输出太过复杂,所以每训练100次输出一次
2. 采用CIFAR10这个数据集,因为这个图片比较少,好下载
3. 利用tensorboard进行可视化
4. with torch.no_grad():在使用pytorch时,并不是所有的操作都需要进行计算图的生成(计算过程的构建,以便梯度反向传播等操作)。而对于tensor的计算操作,默认是要进行计算图的构建的,在这种情况下,可以使用 with torch.no_grad():,强制之后的内容不进行计算图构建。
5. 利用argmax()可以得知一个正确率
6. 在最后用save保存模型

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值