模型训练套路(一)

一、训练完整使用网络模型

import torch

import torchvision

from torch import nn

from torch.utils.data import DataLoader
from model1 import* # 此处的引用为此文在实现过程中所解决的问题

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)

查看数据集的长度

train_data_size = len(train_data)

test_data_size = len(test_data)

格式化 # 格式化注意的是,之间是.的连接

print("训练数据集的长度为: {}".format(train_data_size))

print("测试数据集的长度为: {}".format(test_data_size))

利用dataloade r加载数据集#加载数据集的参数设置

train_dataloader = DataLoader (train_data, batch_size=64)

test_dataloader = DataLoader(test_data, batch_size=64)

创建网络模型

sun = SUN()

损失函数 交叉熵函数的使用

loss_fn = nn.CrossEntropyLoss()

优化器(SGD随机梯度下降)

learning_rate = 0.01

optimizer = torch.optim.SGD(sun.parameters(), lr = learning_rate)

设置网络训练的参数

记录训练的次数

total_train_step = 0

记录测试的次数

total_test_step = 0

训练的轮数

epoch = 10

for i in range**(epoch)**:

print("-------第{}轮训练开始--------".format(i+1))

训练网络模型,从训练的data中取数据

训练步骤开始

for data in train_dataloader:

imgs, targets = data

outputs = sun(imgs)

将得到的输出与真实的target比较,得到误差

loss =loss_fn(outputs, targets)

优化器优化模型

进行优化,首先是梯度清零

optimizer.zero_grad()

得到每个节点的梯度

loss.backward()

对其中的参数进行优化

optimizer.step()

total_test_step = total_test_step + 1

print("训练次数:{}, Loss: {}".format(total_test_step, loss.item()))

二、调用的神经网络模型

复制代码
import torch
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential


class SUN(nn.Module):
    def __init__(self):
        super(SUN, self).__init__()
       self.model = nn.Sequential(
            nn.Conv2d(3, 32, 5, 1, 2),
           nn.MaxPool2d(2),
          nn.Conv2d(32, 32, 5, 1, 2),
            nn.MaxPool2d(2),
           nn.Conv2d(32, 64, 5, 1, 2),
           nn.MaxPool2d(2),
            nn.Flatten(),
         nn.Linear(1024, 64),
           nn.Linear(64, 10)
        )

    def forward(self, x):
        x =self.model(x)
        return x



if __name__ == '__main__':
    sun = SUN()
    input = torch.ones((64, 3, 32,32))
    output = sun(input)
    print(output.shape)

三、调用python文件

在调用的python文件时,会出现一些问题:

python 复制代码
from model1 import*

使用该语句调用,但是model1会画红色波浪线报错,并且,引用的神经网络也会出现报错,原因就是,未正确引用py文件。

尝试的解决办法:使用.model1,这种办法不可取后;

使用标记目录仍未成功;

最终,神经网络的py文件与训练的该文件在同一目录下,将被引用的Py文件,放在需引用文件的上一级目录下。也就是说,被引用文件在需引用文件的上一级。

接套路一代码:

复制代码
# 如何知道数据训练好了没有
# 利用现有模型进行测试
# 在测试数据集上走一遍,以测试数据集的损失,来判定模型训练好了没有
# 测试过程中不需要在对模型进行调优
# 测试步骤开始
复制代码
    total_test_loss = 0
   with torch.no_grad(): # 将参数梯度调零
        for data in test_dataloader:
            imgs, targets = data
            outputs = sun(imgs)
            loss =loss_fn(outputs, targets)
            total_test_loss = total_test_loss + loss.item()

        print("整体测试集上的Loss:{}".format(total_test_loss))

        writer.add_scalar("test_loss",total_test_loss, total_train_step)
        total_test_step +=1

对模型的保存

复制代码
        torch.save(sun, "sun_{}.path".format(i))
        print("模型已保存")

writer.close()

在tensorboard上显示:

经过10轮的训练,测试集与训练集的损失值变化。

输出(outputs)与最终的预测(predicts)之间的转变,使用函数Argmax,就能够求出横向的最大值所在的位置。

相关推荐
南京码讯光电技术有限公司13 分钟前
2026年4G/5G工业CPE推荐:从极端场景看硬核选型
人工智能
企业智能研究39 分钟前
企业如何落地企微私域智能客服来降本增效:从技术选型到实施落地的完整指南
大数据·人工智能·企业微信·智能客服
AI办公探索者1 小时前
仓储物流AI任务执行的技术拆解:从WMS自动化到多设备协同的落地路径
运维·人工智能·ai·自动化
delishcomcn1 小时前
边缘计算+AI模型:电化铝分切装备的智能化改造路径
大数据·人工智能·边缘计算
fai厅的秃头姐!1 小时前
OpenCV——进阶
人工智能·opencv·计算机视觉
蓝速科技1 小时前
蓝速 AI 双屏翻译机酒店涉外接待部署指南
人工智能
q567315231 小时前
人工智能训练数据采集:稳定代理IP高并发方案全解析
人工智能·爬虫·网络协议·tcp/ip·代理模式·代理ip
太原geo小侦探1 小时前
2026门店AI流量实测测评:同为实体门店,AI问答曝光差距在哪?
大数据·人工智能·生活·流量运营·内容运营
大鹏的NLP博客1 小时前
机器学习中的统计波动控制与表征几何优化原则:从函数稳定性到隐空间结构学习
人工智能·深度学习·机器学习
AI大法师1 小时前
一个机场如何被做成 IP 场景:宝可梦机场的设计方法总结
大数据·人工智能·设计模式·新媒体运营