P28 神经网络-完整的模型验证套路

#P28 神经网络-完整的模型验证套路

'''完整的模型验证(测试,demo)套路:
利用已经训练好的模型,然后给它提供输入(与训练模型套路中的测试部分类似)。如果模型训练好了,那么这个程序就是可以对外提供的一个应用。'''


#test.py
import torch
import torchvision
from PIL import Image
from torch import nn

image_path = "../images/dog.png"#设置需要输入的图片的路径
image = Image.open(image_path)#读取图片为PIL类型
print(image)#打印图片的数据
image = image.convert('RGB')#保留颜色通道
# png格式是四个通道.除了RGB三通道外,还有一透明度通道。所以需要使用.convert('RGB')。
# 如果图片本来就是三个颜色通道,经过这个操作后不变。加上这一步后,可以适应png、jpg等各种格式的图片。
# 有时候可以直接运行,是因为不同截图软件截图保留的通道数是不一样的。
transform = torchvision.transforms.Compose([torchvision.transforms.Resize((32, 32)),
                                            torchvision.transforms.ToTensor()])#将图片转换成32*32尺寸的tensor类型,为了符合网络模型的输入shape。

image = transform(image)#调用并转换图片尺寸和类型
print(image.shape)#打印图片尺寸
image = torch.reshape(image, (1, 3, 32, 32))#因为网络的输入(无论是训练、测试、验证)需要batch_size,因此修改图片形状为满足网络可以输入的形状。
print(image.shape)#打印图片尺寸

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

# 方式1 对应 保存方式1,加载模型(之前训练模型是方式1保存的)
# 用方式1加载的时候需要让模型能读到模型的结构或者说定义的方式
model = torch.load("tudui_29_gpu.pth", map_location=torch.device('cpu'))#不同环境训练的模型,需要使用映射加载指定加载设备。
print(model)#打印加载了训练好的模型的网络
model.eval()#将网络设置成评估(验证)模式。这句代码可以没有。#只对特定层有影响,如Dropout, BatchNorm等
with torch.no_grad():#让with下的代码没有梯度了,确保不会进行调优。可以节约算力。
    output = model(image)#输入图片进行输出
print(output)#打印输出的数据

print(output.argmax(1))#1表示横向看,0表示竖向看,输出 值更大的 索引。#输出为利于解读的方式。

'''
#运行结果:
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=159x179 at 0x18E9DB77CD0>
torch.Size([3, 32, 32])
torch.Size([1, 3, 32, 32])
Tudui(
  (model): Sequential(
    (0): Conv2d(3, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
    (1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    (2): Conv2d(32, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
    (3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    (4): Conv2d(32, 64, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
    (5): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    (6): Flatten(start_dim=1, end_dim=-1)
    (7): Linear(in_features=1024, out_features=64, bias=True)
    (8): Linear(in_features=64, out_features=10, bias=True)
  )
)
tensor([[-0.2980, -0.7984,  3.4900,  3.6949, -1.4234,  8.1513, -2.8560,  1.3560,
         -6.6526, -5.4826]])
tensor([5])
'''

'''完整的模型验证(测试,demo)套路:
利用已经训练好的模型,然后给它提供输入(与训练模型套路中的测试部分类似)。如果模型训练好了,那么这个程序就是可以对外提供的一个应用。'''

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西西与东东

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值