模型的保存:
当你在cpu上使用gpu训练的模型时
model=torch.load(r"E:\pycharm\Py_Projects\logs\tudui_2.pth")
改为(就是把gpu训练完的东西映射到gpu上)
model=torch.load(r"E:\pycharm\Py_Projects\logs\tudui_2.pth",map_location=torch.device('cpu')
标签对应图片类型:
完整的验证套路:
# 在网上,随便找一个狗的图片,把这个狗的图片放到任一一个文件夹下,这里我们放到test_picture文件夹里
import torch
import torchvision
from PIL import Image
# 在test.py下访问我们刚才复制的图片文件
from torch import nn
img_path=r"E:\pycharm\Py_Projects\test_picture\dog.png"
image=Image.open(img_path)
print(image)
image=image.convert('RGB') # 因为png格式是四个通道,除了RGB三通道外,还有一个透明度通道,所以我们调用image=image.convert('RGB'),保留颜色通道
transform=torchvision.transforms.Compose([torchvision.transforms.Resize((32,32)),torchvision.transforms.ToTensor()]) # compose是把几个transform联例在一起 ,model中inputs的图片类型得是32*32大小的
image=transform(image)
print(image.shape)
# 找到网络模型,先把网络模型copy进去
class Tudui(nn.Module):
def __init__(self):
super(Tudui, self).__init__()
self.model=nn.Sequential(
nn.Conv2d(3,32,5,1,2) , # 其中padding=2 是通过计算得出的,也可以写-1自动计算
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
# 加载网络模型
model=torch.load(r"E:\pycharm\Py_Projects\logs\tudui_29_gpu.pth",map_location=torch.device("cpu"))
image=torch.reshape(image,(1,3,32,32))
model.eval() # model转换为测试类型
with torch.no_grad(): # 节约性能
output=model(image)
print(output)
print(output.argmax(1)) # 把output的那10项中最接近的输出出来
选用第30轮gpu训练的模型进行训练
预测结果: