利用已經(jīng)訓(xùn)練好的模型,給它提供輸入,看輸出
一、輸入
1.找到一張圖片
- 對于圖片要進(jìn)行轉(zhuǎn)換
png格式是四個通道,除了RGB三通道外,還有一個透明度通道,通過下面的命令,可以適應(yīng)png、jpg各種格式的圖片。
命令:
image=image.convert('RGB')
二、實驗對應(yīng)的部分
1.代碼
import torch
import torchvision
from PIL import Image #直接從PIL中導(dǎo)入Image,不是從PIL.Image
# 1. 圖片的輸入
from torch import nn
image_path="./images/plane.png"
image=Image.open(image_path)
print(image)
# 2. 轉(zhuǎn)換為三通道
image=image.convert('RGB')
# 3. 將PIL格式轉(zhuǎn)變?yōu)閠ensor數(shù)據(jù)類型
transform=torchvision.transforms.Compose([torchvision.transforms.Resize((32,32)),
torchvision.transforms.ToTensor()])
image=transform(image)
print(image.shape)
# 4.引入模型結(jié)構(gòu):也可以單獨建立文件夾,利用import
class Tudui(nn.Module):
def __init__(self):
super(Tudui, self).__init__()
self.model1=nn.Sequential(
nn.Conv2d(3, 32, 5, stride=1,padding=2), # in_channel 3;out_channel 32;kernel 5;padding需要計算(一般不會太大)
nn.MaxPool2d(2), # kennel_Size=2
nn.Conv2d(32, 32, 5,stride=1,padding=2),
nn.MaxPool2d(2),
nn.Conv2d(32, 64, 5,stride=1, padding=2),
nn.MaxPool2d(2),
nn.Flatten(), # 展平 :可以把后面的刪掉 獲得輸出的大小
nn.Linear(64*4*4, 64), # 看上一層的大小64*4*4=1024 ,可以看到是1024
nn.Linear(64, 10) # 輸入大小 64 輸出大小 10
)
def forward(self,x):
x=self.model1(x)
return x
# 5. 使用訓(xùn)練好的模型
model=torch.load("tudui_49_GPU.pth") #由GPU訓(xùn)練
# model=torch.load("tudui_49_GPU.pth",map_location=torch.device("cpu")) #由GPU模型映射到CPU模型上,后面的image不加cuda了
print(model)
# 6. 輸出
image=torch.reshape(image,(1,3,32,32)) #轉(zhuǎn)變通道數(shù)
image=image.cuda() #因為模型是GPU訓(xùn)練的,數(shù)據(jù)集也要用,要是CPU訓(xùn)練的模型,就去掉這個命令
model.eval()
with torch.no_grad(): #節(jié)省步驟,提升性能
output=model(image)
print(output)
print(output.argmax(1)) #橫向比較
2.輸出對應(yīng)的類別
3.運行結(jié)果:
利用colab運行50輪后的結(jié)果:測試集準(zhǔn)確度0.65
預(yù)測狗
預(yù)測飛機
本文摘自 :https://www.cnblogs.com/