python 深度学习 训练流程梳理--pytorch简单搭建自己的训练过程

1.数据集的准备(官方Data–CIFAR10为例),主要包括两部分:train_data、test_data:

import 需要的包,小技巧:开始不知道用哪些包可以先不引用,输入命令后未引用的包下面会有红线警告,鼠标点击一下,然后 alt+enter会显示 需要引用的选项,选择即可。
python 深度学习 训练流程梳理--pytorch简单搭建自己的训练过程_第1张图片

train_data = torchvision.datasets.CIFAR10(root= r'D:\train_maskcsv\Tudui\data',train=True,transform=torchvision.transforms.ToTensor(),
                                          download=True)
test_data = torchvision.datasets.CIFAR10(root= r'D:\train_maskcsv\Tudui\data',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站土堆学的,,强烈推荐大家!!!!

你可能感兴趣的:(pytorch,python,深度学习)