Pytorch深度学习-----完整的模型验证套路

系列文章目录

PyTorch深度学习——Anaconda和PyTorch安装
Pytorch深度学习-----数据模块Dataset类
Pytorch深度学习------TensorBoard的使用
Pytorch深度学习------Torchvision中Transforms的使用(ToTensor,Normalize,Resize ,Compose,RandomCrop)
Pytorch深度学习------torchvision中dataset数据集的使用(CIFAR10)
Pytorch深度学习-----DataLoader的用法
Pytorch深度学习-----神经网络的基本骨架-nn.Module的使用
Pytorch深度学习-----神经网络的卷积操作
Pytorch深度学习-----神经网络之卷积层用法详解
Pytorch深度学习-----神经网络之池化层用法详解及其最大池化的使用
Pytorch深度学习-----神经网络之非线性激活的使用(ReLu、Sigmoid)
Pytorch深度学习-----神经网络之线性层用法
Pytorch深度学习-----神经网络之Sequential的详细使用及实战详解
Pytorch深度学习-----损失函数(L1Loss、MSELoss、CrossEntropyLoss)
Pytorch深度学习-----优化器详解(SGD、Adam、RMSprop)
Pytorch深度学习-----现有网络模型的使用及修改(VGG16模型)
Pytorch深度学习-----神经网络模型的保存与加载(VGG16模型)
Pytorch深度学习-----完整神经网络模型训练套路
Pytorch深度学习-----实现神经网络模型在GPU上进行训练的方法


文章目录

  • 系列文章目录
  • 一、完整的模型验证套路步骤
    • 1.步骤1:导入必要的库
    • 2.步骤2:加载和预处理图像
    • 3.步骤3:定义神经网络模型
    • 4.步骤4:加载预训练模型
    • 5.步骤5:为模型推理准备图像
    • 6.步骤6:模型评估和预测
  • 二、代码演示


一、完整的模型验证套路步骤

1.步骤1:导入必要的库

import torch
import torchvision
from PIL import Image
from torch import nn

这里,导入了用于深度学习任务的torch和torchvision,用于图像处理的PIL中的Image,以及torch中的nn模块用于神经网络层。

2.步骤2:加载和预处理图像

image_path = "../imgs/airplane.png"
image = Image.open(image_path)
print(image)
image = image.convert('RGB')

从给定路径加载一张图像,并将其转换为RGB格式,确保与大多数预训练模型的兼容性,这些模型期望有三个颜色通道。

transform = torchvision.transforms.Compose([
    torchvision.transforms.Resize((32, 32)),
    torchvision.transforms.ToTensor()
])
image = transform(image)
print(image.shape)

图像被调整为32x32像素的尺寸,并转换为张量。使其符合要求。

3.步骤3:定义神经网络模型

class Lgl(nn.Module):
    def __init__(self):
        super(Lgl, 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

Lgl类定义了一个CNN,包含三个卷积层,接着是最大池化、展平操作以及两个线性层。该模型设计用于图像分类。

4.步骤4:加载预训练模型

model = torch.load("tudui_0.pth", map_location=torch.device('cpu'))  
print(model)

加载保存在文件tudui_0.pth中的预训练模型。map_location参数指定模型加载到CPU上。

5.步骤5:为模型推理准备图像

image = torch.reshape(image, (1, 3, 32, 32))

图像张量被重塑以匹配模型期望的输入形状,即一批图像。这里,它是一个包含3个颜色通道和32x32维度的单个图像。

6.步骤6:模型评估和预测

model.eval()
with torch.no_grad():  
    output = model(image)
print(output)

将模型设置为评估模式,并使用torch.no_grad()关闭梯度计算

print(output.argmax(1))

最后,打印得分概率最高的类别,这是模型对输入图像的分类预测。

二、代码演示

# 导入所需的库  
import torch
import torchvision
from PIL import Image
from torch import nn

# 定义图像路径  
image_path = "../imgs/airplane.png"

# 使用PIL库打开图像  
image = Image.open(image_path)
print(image)

# 将图像转换为RGB格式,这是PyTorch和torchvision需要的格式  
image = image.convert('RGB')

# 定义图像转换流程,包括调整大小和转换为Tensor  
transform = torchvision.transforms.Compose([
    torchvision.transforms.Resize((32, 32)),  # 将图像大小调整为32x32  
    torchvision.transforms.ToTensor()  # 将图像转换为Tensor格式,并归一化到[0,1]范围  
])

# 对图像应用转换流程  
image = transform(image)
print(image.shape)  # 输出转换后的图像Tensor的形状,应为(1, 3, 32, 32)  


# 定义一个简单的卷积神经网络模型(Lgl)  
class Lgl(nn.Module):
    def __init__(self):
        super(Lgl, self).__init__()
        self.model = nn.Sequential(
            nn.Conv2d(3, 32, 5, 1, 2),  # 第一个卷积层,输入通道数为3(RGB),输出通道数为32,卷积核大小为5x5,步长为1,填充为2  
            nn.MaxPool2d(2),  # 最大池化层,池化核大小为2x2  
            nn.Conv2d(32, 32, 5, 1, 2),  # 同上,但输出通道数仍为32  
            nn.MaxPool2d(2),  # 同上  
            nn.Conv2d(32, 64, 5, 1, 2),  # 第三个卷积层,输出通道数为64,其他参数同上  
            nn.MaxPool2d(2),  # 同上  
            nn.Flatten(),  # 将多维的输入一维化,用于全连接层  
            nn.Linear(64 * 4 * 4, 64),  # 全连接层,输入特征数为64 * 4 * 4(经过前面卷积和池化操作后的特征数),输出特征数为64  
            nn.Linear(64, 10)  # 全连接层,输出特征数为10(假设这是一个10类分类问题)  
        )

    def forward(self, x):
        x = self.model(x)  # 通过模型进行前向传播,得到输出结果x  
        return x

   

# 加载预训练的模型权重文件
model = torch.load("tudui_0.pth", map_location=torch.device('cpu'))
print(model)  # 打印加载的模型结构信息,以确认模型是否正确加载  

# 将图像Tensor调整为模型需要的输入形状(这里假设模型的输入形状为(1, 3, 32, 32))  
image = torch.reshape(image, (1, 3, 32, 32))
print(image.shape)  # 输出调整后的图像Tensor的形状,应为(1, 3, 32, 32)  

# 将模型设置为评估模式,关闭梯度计算(用于推理阶段)  
model.eval()  # 将模型设置为评估模式  
with torch.no_grad():  # 在这个with语句块内,不会计算梯度,节省内存并加速推理过程  
    # 通过模型进行推理,得到输出结果output(即模型对输入图像的预测结果)  
    output = model(image)
    print(output)  # 打印推理结果output的形状和值范围等信息,以确认推理过程是否正常进行  
    print(output.argmax(1))  # 使用argmax函数获取预测概率最大的类别索引(即模型的预测结果),输出一个包含每个预测类别的索引的数组。例如,[0]表示第一类。

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