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上进行训练的方法
import torch
import torchvision
from PIL import Image
from torch import nn
这里,导入了用于深度学习任务的torch和torchvision,用于图像处理的PIL中的Image,以及torch中的nn模块用于神经网络层。
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像素的尺寸,并转换为张量。使其符合要求。
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,包含三个卷积层,接着是最大池化、展平操作以及两个线性层。该模型设计用于图像分类。
model = torch.load("tudui_0.pth", map_location=torch.device('cpu'))
print(model)
加载保存在文件tudui_0.pth中的预训练模型。map_location参数指定模型加载到CPU上。
image = torch.reshape(image, (1, 3, 32, 32))
图像张量被重塑以匹配模型期望的输入形状,即一批图像。这里,它是一个包含3个颜色通道和32x32维度的单个图像。
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]表示第一类。