23、完整模型训练的步骤

1、以CIFAR10为例子

复制代码
 1 '''以CIFAR10为例子训练完整的模型步骤'''
 2 import torch
 3 import torchvision
 4 from torch import nn
 5 from torch.nn import Conv2d
 6 from torch.utils.data import DataLoader
 7 
 8 '''1、准备数据'''
 9 train_data=torchvision.datasets.CIFAR10(root='../../dataset/CIFAR10',train=True,transform=torchvision.transforms.ToTensor(),
10                                         download=True)
11 test_data=torchvision.datasets.CIFAR10(root='../../dataset/CIFAR10',train=False,transform=torchvision.transforms.ToTensor(),
12                                         download=True)
13 #查看数据集的大小
14 train_data_size=len(train_data)
15 test_data_size=len(test_data)
16 print('训练数据集的长度为:{}'.format(train_data_size))
17 print('测试数据集的长度为:{}'.format(test_data_size))
18 
19 '''2、利用 DataLoader 加载数据'''
20 train_dataloader=DataLoader(train_data,batch_size=64)
21 test_dataloader=DataLoader(test_data,batch_size=64)
22 
23 '''3、搭建神经网络模型,习惯上会把模型单独放在一个文件,然后使用的时候进行引入'''
24 class class_net(nn.Module):
25     def __init__(self):
26         super().__init__()
27         self.modle=nn.Sequential(
28             nn.Conv2d(in_channels=3, out_channels=32, kernel_size=5,stride=1, padding=2),
29             nn.MaxPool2d(kernel_size=2),
30             nn.Conv2d(32,32,5,1,2),
31             nn.MaxPool2d(kernel_size=2),
32             nn.Conv2d(32,64,5,1,2),
33             nn.MaxPool2d(kernel_size=2),
34             nn.Flatten(),
35             nn.Linear(in_features=64*4*4,out_features=64),
36             nn.Linear(64,10)
37         )
38 
39     def forward(self,x):
40         x=self.modle(x)
41         return x
42 #创建网络模型
43 tuidui=class_net()
44 
45 '''4、创建损失函数'''
46 loss_fn=nn.CrossEntropyLoss()
47 '''5、创建优化器'''
48 #习惯把学习速率单独提出来,方便修改,两种写法
49 # learn_rate=0.01
50 learn_rate=1e-2     #1e-2=1*(10)^(-2)=1/100=0.01
51 optimizer=torch.optim.SGD(tuidui.parameters(),lr=learn_rate)
52 
53 '''6、训练网络模型'''
54 #设置训练网络的一些参数
55 
56 total_train_step=0  #记录训练的次数
57 total_test_step=0   #记录测试的次数
58 epoch=10    #训练的轮数
59 for i in range(epoch):
60     print('--------第{}轮训练开始----------'.format(i+1))
61     #训练步骤开始
62     for data in train_dataloader:
63         imgs,targets=data
64         outputs=tuidui(imgs)
65         loss=loss_fn(outputs,targets)
66 
67         #进行优化的第一步是梯度清零
68         optimizer.zero_grad()
69         #利用损失来求每一个参数节点的梯度
70         loss.backward()
71         #进行优化
72         optimizer.step()
73         #更新训练次数
74         total_train_step+=1
75         print('训练次数:{},loss:{}'.format(total_train_step,loss.item()))
76         #loss.item(),使用item会让tensor类型的数据直接变成数字,数值型
复制代码

通常会把网络模型单独写成一个文件,然后使用的时候直接引入,但是这里我的在引入的时候一直报错。同目录下的导入报错。

 

posted @   bokeAR  阅读(308)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示