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类型的数据直接变成数字,数值型
通常会把网络模型单独写成一个文件,然后使用的时候直接引入,但是这里我的在引入的时候一直报错。同目录下的导入报错。
标签:loss,nn,23,步骤,模型,train,64,data,size From: https://www.cnblogs.com/ar-boke/p/17156788.html