pytorch(网络模型训练)(代码片段)

月屯 月屯     2022-12-08     242

关键词:

上一篇

目录标题

网络模型训练

小插曲

区别

import  torch
a=torch.tensor(5)
print(a)
print(a.item())

import torch

output=torch.tensor([[0.1,0.2],[0.05,0.4]])
print(output.argmax(1))# 为1选取每一行最大值的索引,为0选取每一列最大值的索引

preds=output.argmax(1)
target=torch.tensor([0,1])
print(preds==target)
print((preds==target).sum())

训练模型

import torch
from torch import nn
from torch.nn import Sequential, Conv2d, MaxPool2d, Linear, Flatten
# 搭建神经网络
class Dun(nn.Module):
    def __init__(self):
        super().__init__()
        # 2.
        self.model1 = Sequential(Conv2d(3, 32, 5, padding=2),
                                 MaxPool2d(2),
                                 Conv2d(32, 32, 5, padding=2),
                                 MaxPool2d(2),
                                 Conv2d(32, 64, 5, padding=2),
                                 MaxPool2d(2),
                                 Flatten(),
                                 Linear(1024, 64),
                                 Linear(64, 10))
    def forward(self,x):
        x=self.model1(x)
        return x
if __name__=='__main__':
    dun=Dun()
    input=torch.ones((64,3,32,32))
    print(dun(input).shape)

数据训练


import torchvision
# 准备数据集
from torch.utils.tensorboard import SummaryWriter

from model import *
from torch.utils.data import DataLoader

train_data=torchvision.datasets.CIFAR10(root="./data_set_train",train=True,transform=torchvision.transforms.ToTensor(),download=True)
test_data=torchvision.datasets.CIFAR10(root="./data_set_test",train=False,transform=torchvision.transforms.ToTensor(),download=True)

#长度
train_data_size=len(train_data)
test_data_size=len(test_data)
print("train_data_size:",format(train_data_size))
print("test_data_size:",format(test_data_size))

# 加载数据集
train_dataloader=DataLoader(train_data,batch_size=64)
test_dataloder=DataLoader(test_data,batch_size=64)

#创建网络模型
dun=Dun()
#损失函数
loss_fn=nn.CrossEntropyLoss()
# 优化器
learning_rate=1e-2
optimizerr=torch.optim.SGD(dun.parameters(),lr=learning_rate)
#设置训练网络参数
# 记录训练次数
total_train_step=0
# 记录测试次数
total_test_step=0
#训练次数
epoch=10

# 追加tensorboard
writer=SummaryWriter("./logs")

for i in range(epoch):
    print("----------第轮训练------".format(i+1))
    # 训练开始
    dun.train()# 网络模型中,对dropout、BatchNorm层等起作用,进入训练状态
    for data in train_dataloader:
        img,target=data
        output=dun(img)
        loss=loss_fn(output,target)

        #优化器优化
        optimizerr.zero_grad()
        loss.backward()
        optimizerr.step()

        total_train_step+=1
        print("训练次数:,loss:".format(total_train_step,loss.item()))
        writer.add_scalar("train_loss",loss.item(),total_train_step)

        # 测试步骤
    total_test_loss=0
    # 使用正确率判断模型的好坏
    total_accuracy=0
    dun.eval()# 网络模型中,对dropout、BatchNorm层等起作用,进入验证状态
    with torch.no_grad():
        for data in test_dataloder:
            img,target=data
            output=dun(img)
            total_test_loss+=loss_fn(output,target).item()
            accuracy=(output.argmax(1)==target).sum()
            total_accuracy+=accuracy

    print("整体测试集上的Loss:".format(total_test_loss))
    writer.add_scalar("test_loss",total_test_loss,total_test_step)
    print("整体测试集上的正确率:".format(total_accuracy/test_data_size))
    writer.add_scalar("test_accuracy",total_accuracy/test_data_size,total_test_step)
    total_test_step+=1

    #保存模型
    torch.save(dun,"dun.pth".format(i))
    print("保存模型")

writer.close()

GPU 训练

第一种方式


将以上的三部分调用cuda方法,以上面训练数据的代码为例

# 模型
if torch.cuda.is_available():# 判断是否可以使用gpu
	dun=dun.cuda()
#损失函数
if torch.cuda.is_available():
 loss_fn=loss_fn.cuda()
# 数据(包含训练和测试的)
 if torch.cuda.is_available():
            img = img.cuda()
            target = target.cuda()

方式二:

# 定义训练的设备
device=torch.device("cuda" if torch.cuda.is_available() else "cpu")# 参数分为cpu和cuda,当显卡多个时cuda:0

将方式一的代码换成

dun=dun.to(device)
# 其他数据、loss类似

查看GPU信息

完整模型验证

查看数据集CIFAR10的类别

import torchvision
from PIL import Image
import torch
from torch import nn
from torch.nn import Sequential, Conv2d, MaxPool2d, Linear, Flatten
# 搭建神经网络
class Dun(nn.Module):
    def __init__(self):
        super().__init__()
        # 2.
        self.model1 = Sequential(Conv2d(3, 32, 5, padding=2),
                                 MaxPool2d(2),
                                 Conv2d(32, 32, 5, padding=2),
                                 MaxPool2d(2),
                                 Conv2d(32, 64, 5, padding=2),
                                 MaxPool2d(2),
                                 Flatten(),
                                 Linear(1024, 64),
                                 Linear(64, 10))
    def forward(self,x):
        x=self.model1(x)
        return x

image_path="./img/1.png"
image=Image.open(image_path)
print(image)
# 类型转换
transform=torchvision.transforms.Compose([torchvision.transforms.Resize((32,32)),torchvision.transforms.ToTensor()])
image=transform(image)
print(image.shape)

# 加载网络模型注意加载的模型和现在验证的要么使用cpu要么gpu一致,否则需要map——location映射本地的cpu
model=torch.load("dun0.pth",map_location=torch.device("cpu"))
print(model)
# 类型转换
image=torch.reshape(image,(1,3,32,32))

model.eval()# 模型转换测试类型
# 执行模型
with torch.no_grad():
    output=model(image)
print(output)

print(output.argmax(1))

pytorch:模型训练和预测(代码片段)

-柚子皮-模型训练和预测模型训练单机训练传统的batch训练函数简单的说就是进来一个batch的数据,计算一次梯度,更新一次网络。fori,(images,target)inenumerate(train_loader):#1.inputoutputimages=images.cuda(non_blocking=True)target=tor... 查看详情

pytorch之基于经典网络架构训练图像分类模型(代码片段)

...型,并且直接用训练的好权重当做初始化参数2.参考pytorch官网例子3.设置哪些层需要训练4.优化器设置5.训练模块6.测试模型效果本文参加新星计划人工智能(Pytorch)赛道:https://bbs.csdn.net/topics/613989052一、模块简单介绍我们... 查看详情

小白学习pytorch教程九基于pytorch训练第一个rnn模型(代码片段)

@Author:Runsen当阅读一篇课文时,我们可以根据前面的单词来理解每个单词的,而不是从零开始理解每个单词。这可以称为记忆。卷积神经网络模型(CNN)不能实现这种记忆,因此引入了递归神经网络模型(RNN)来解决这一问题... 查看详情

[pytorch]pytorch保存模型与加载模型(转)(代码片段)

转自:知乎目录:保存模型与加载模型冻结一部分参数,训练另一部分参数采用不同的学习率进行训练1.保存模型与加载简单的保存与加载方法:#保存整个网络torch.save(net,PATH)#保存网络中的参数,速度快,占空间少torch.save(net.state... 查看详情

pytorch使用分布式训练,单机多卡(代码片段)

pytorch的并行分为模型并行、数据并行左侧模型并行:是网络太大,一张卡存不了,那么拆分,然后进行模型并行训练。右侧数据并行:多个显卡同时采用数据训练网络的副本。 一、模型并行 二、数据并行数据并行的操... 查看详情

pytorch教程-4:pytorch中网络的训练与测试(代码片段)

PyTorch教程系列:https://blog.csdn.net/qq_38962621/category_10652223.htmlPyTorch教程-4:PyTorch中网络的训练与测试基本原理对于要训练的模型,首先我们需要定义其结构,实例化一个用于计算Loss的loss_function和一个用于更新参数... 查看详情

学习笔记《pytorch入门》完整的模型训练套路(cifar10model)(代码片段)

文章目录准备数据集(训练和测试)搭建神经网络创建损失函数,分类问题使用交叉熵创建优化器设置训练网络的一些参数进入训练循环准备进入测试步骤完整代码:准备数据集(训练和测试)训练数据集... 查看详情

4.使用预训练的pytorch网络进行图像分类(代码片段)

4.使用预训练的PyTorch网络进行图像分类这篇博客将介绍如何使用PyTorch预先训练的网络执行图像分类。利用这些网络只需几行代码就可以准确地对1000个常见对象类别进行分类。这些图像分类网络是开创性的、最先进的图像分类网... 查看详情

4.使用预训练的pytorch网络进行图像分类(代码片段)

4.使用预训练的PyTorch网络进行图像分类这篇博客将介绍如何使用PyTorch预先训练的网络执行图像分类。利用这些网络只需几行代码就可以准确地对1000个常见对象类别进行分类。这些图像分类网络是开创性的、最先进的图像分类网... 查看详情

pytorch从头搭建并训练一个神经网络模型(图像分类cnn)(代码片段)

...多稍微修改下源码的接口满足自己的需求。还从来没有用PyTorch从头搭建并训练一个模型出来。正好最近在较为系统地学PyTorch,就总结一下如何从头搭建并训练一个神经网络模型。1.使用torchvision加载数据集并做预处理我们使... 查看详情

pytorch保存模型断点以及加载断点继续训练(代码片段)

   在训练神经网络时,用到的数据量可能很大,训练周期较长,如果半途中断了训练,下次从头训练就会很费时间,这时我们就想断点续训。一、神经网络模型的保存,基本两种方式:1.保存完整模型model, torch.sa... 查看详情

用pytorch对以mnist数据集进行卷积神经网络(代码片段)

PyTorch构建深度学习网络一般步骤加载数据集\\colorred加载数据集加载数据集;定义网络结构模型\\colorred定义网络结构模型定义网络结构模型;定义损失函数\\colorred定义损失函数定义损失函数;定义优化算法\\colorred定... 查看详情

小白学习pytorch教程十一基于mnist数据集训练第一个生成性对抗网络(代码片段)

@Author:RunsenGAN是使用两个神经网络模型训练的生成模型。一种模型称为生成网络模型,它学习生成新的似是而非的样本。另一个模型被称为判别网络,它学习区分生成的例子和真实的例子。生成性对抗网络2014࿰... 查看详情

小白学习pytorch教程十一基于mnist数据集训练第一个生成性对抗网络(代码片段)

@Author:RunsenGAN是使用两个神经网络模型训练的生成模型。一种模型称为生成网络模型,它学习生成新的似是而非的样本。另一个模型被称为判别网络,它学习区分生成的例子和真实的例子。生成性对抗网络2014࿰... 查看详情

pytorch应用:构建分类器(代码片段)

Pytorch应用:构建分类器学习目标1.分类器任务和数据介绍2.训练分类器的步骤2.1使用torchvision下载CIFAR10数据集2.2定义卷积神经网络2.3定义损失函数2.4在训练集上训练模型2.5保存模型3.在测试集上测试模型3.1展示测试集中的若干... 查看详情

pytorch自定义数据集模型训练流程(代码片段)

文章目录Pytorch模型自定义数据集训练流程1、任务描述2、导入各种需要用到的包3、分割数据集4、将数据转成pytorch标准的DataLoader输入格式5、导入预训练模型,并修改分类层6、开始模型训练7、利用训好的模型做预测Pytorch模... 查看详情

[pytorch系列-58]:循环神经网络-词向量的自动构建与模型训练代码示例(代码片段)

...8目录第1章 代码编写前的准备1.1理论前提1.2业务说明1.3 pytorch库1.4pytorch词向量表nn.Embedding第2章代码实现2.1文本数据2.2构建训练数据2.3前向运算模型构建2.4反向传播模型定义2.4模型训练2.5模型测试第1章 代码编写前的准备1.1理论... 查看详情

pytorch分布式训练(dataparallel/distributeddataparallel)(代码片段)

一、模型并行与数据并行并行训练分为模型并行和数据并行:模型并行:由于网络过大,将网络拆分成几个部分分别在多个GPU上并行训练;数据并行:将batch中的数据拆分为多份,分别在多个GPU上训练。二... 查看详情