1.数据集的准备(官方Data–CIFAR10为例),主要包括两部分:train_data、test_data:
import 需要的包,小技巧:开始不知道用哪些包可以先不引用,输入命令后未引用的包下面会有红线警告,鼠标点击一下,然后 alt+enter会显示 需要引用的选项,选择即可。
train_data = torchvision.datasets.CIFAR10(root= r'D:train_maskcsvTuduidata',train=True,transform=torchvision.transforms.ToTensor(), download=True) test_data = torchvision.datasets.CIFAR10(root= r'D:train_maskcsvTuduidata',train=False,transform=torchvision.transforms.ToTensor(), download=True)
小技巧:光标放在括号里,Ctrl+p 可以显示需要的参数类型。
参数解释:root 为数据集保存的地方,transform为要进行的Tensor处理,train=True 或Flase,该数据集是否为训练数据集,download=True,需要下载,一般都为True,如果路径里面存在该数据集运行时会提示已存在。
2.查看数据集大小、长度
数据集下载完成后,比如图片,我们一般会查看训练集、测试集中一下里面有多少张:
#数据长度 train_data_size = len(train_data) test_data_size = len(test_data) print('训练集数据长度:{}'.format(train_data_size)) print('测试集数据长度:{}'.format(test_data_size))
3.创建dataloader,dataloader的作用是 把数据集数据分批打包,喂给模型进行处理
#利用dataloader 加载 train_dataloader = DataLoader(train_data,batch_size=64,shuffle=True) test_dataloader = DataLoader(test_data,batch_size=64,shuffle=False)
参数解释:batch_size为每一批进行处理的数量,shuffle为是否对数据进行打乱处理
4.创建模型
一般情况会新建一个model.py文件,专门存储模型文件:
import torch from torch import nn #模型名字叫 Tudui class Tudui(nn.Module): def __init__(self): super(Tudui, 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(64*4*4, 64), nn.Linear(64, 10) ) def forward(self,x): x = self.model(x) return x if __name__ == '__main__': tudui = Tudui() input = torch.ones((64,3,32,32)) output = tudui(input) print(output.shape)
5.引用模型
在train文件中引入刚才创建的模型文件Tudui:
from model import * tudui = Tudui()
6.创建损失函数:
这里使用交叉熵函数
loss_fn = nn.CrossEntropyLoss()
7.选择优化器:SGD,学习率=0.001,Moment=0.9
optimizer = torch.optim.SGD(tudui.parameters(),lr=0.001,momentum=0.9)
8.设置训练过程中的一些参数:例如训练次数、测试次数、训练轮数、
#设置训练网络的参数 total_train_step = 0 #记录训练次数 total_test_step = 0 #记录测试的次数 epoch = 10 #记录训练的轮数
9.使用Tensorboard显示
writer = SummaryWriter('../logs_train')
10.准备训练过程:
for i in range(epoch): print('-----第 {} 轮训练开始------'.format(i+1)) #训练步骤开始 for data in train_dataloader: img, targets = data outputs = tudui(img) 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())) #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: img, targets = data outputs = tudui(img) loss = loss_fn(outputs,targets) total_test_loss = total_test_loss + loss accuracy = (outputs.argmax(1) == targets).sum() total_accuracy = total_accuracy + accuracy print('整体测试集上的Loss: {}'.format(total_test_loss.item())) print('整体测试集上正确率: {}'.format((total_accuracy)/test_data_size)) writer.add_scalar('tset_loss',total_test_loss.item(),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+1)) print('模型已保存') writer.close() #记得关闭写入
11.总结,结束可以试着训练自己的数据集啦
声明:自己也是初学,很多也不专业,跟着B站土堆学的,,强烈推荐大家!!!!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)