數據集下載地址:
鏈接:https://pan.baidu.com/s/1l1AnBgkAAEhh0vI5_loWKw
提取碼:2xq4
創建數據集:https://www.cnblogs.com/xiximayou/p/12398285.html
讀取數據集:https://www.cnblogs.com/xiximayou/p/12422827.html
進行訓練:https://www.cnblogs.com/xiximayou/p/12448300.html
保存模型並繼續進行訓練:https://www.cnblogs.com/xiximayou/p/12452624.html
加載保存的模型並測試:https://www.cnblogs.com/xiximayou/p/12459499.html
划分驗證集並邊訓練邊驗證:https://www.cnblogs.com/xiximayou/p/12464738.html
使用學習率衰減策略並邊訓練邊測試:https://www.cnblogs.com/xiximayou/p/12468010.html
利用tensorboard可視化訓練和測試過程:https://www.cnblogs.com/xiximayou/p/12482573.html
從命令行接收參數:https://www.cnblogs.com/xiximayou/p/12488662.html
使用top1和top5准確率來衡量模型:https://www.cnblogs.com/xiximayou/p/12489069.html
使用預訓練的resnet18模型:https://www.cnblogs.com/xiximayou/p/12504579.html
計算數據集的平均值和方差:https://www.cnblogs.com/xiximayou/p/12507149.html
讀取數據集的第二種方式:https://www.cnblogs.com/xiximayou/p/12516735.html
epoch、batchsize、step之間的關系:https://www.cnblogs.com/xiximayou/p/12405485.html
首先我們上傳一些圖片到image文件夾中:

然后我們畫出這些圖片看看是什么樣子:
import cv2 import matplotlib.pyplot as plt import glob # 使用matplotlib展示多張圖片 def matplotlib_multi_pic1(): i=0 for img in glob.glob('/content/drive/My Drive/colab notebooks/image/*.jpg'): img_name=img.split("/")[-1] img = cv2.imread(img) title=img_name #行,列,索引 plt.subplot(3,3,i+1) plt.imshow(img) plt.title(title,fontsize=8) plt.xticks([]) plt.yticks([]) i+=1 plt.show() matplotlib_multi_pic1()

接着在test文件夾中新建一個test_from_image.py。
import torchvision import sys import torch import torch.nn as nn from PIL import Image sys.path.append("/content/drive/My Drive/colab notebooks") import glob import numpy as np import torchvision.transforms as transforms device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model=torchvision.models.resnet18(pretrained=False) model.fc = nn.Linear(model.fc.in_features,2,bias=False) model.to(device) model.eval() save_path="/content/drive/My Drive/colab notebooks/output/resnet18_best.t7" checkpoint = torch.load(save_path) model.load_state_dict(checkpoint['model']) print("當前模型准確率為:",checkpoint["epoch_acc"]) images_path="/content/drive/My Drive/colab notebooks/image/" transform = transforms.Compose([transforms.Resize((224,224))]) def predict(): true_labels=[] output_labels=[] for image in glob.glob(images_path+"/*.jpg"): print(image) if "cat" in image.split("/")[-1]: tmp=0 else: tmp=1 true_labels.append(tmp) image=Image.open(image) image=image.resize((224,224)) tensor=torch.from_numpy(np.asarray(image)).permute(2,0,1).float()/255.0 print(tensor.shape) tensor=tensor.reshape((1,3,224,224)) tensor=tensor.to(device) #print(tensor.shape) output=model(tensor) print(output) _, pred = torch.max(output.data,1) output_labels.append(pred.item()) return true_labels,output_labels true_labels,output_labels=predict() print("正確的標簽是:") print(true_labels) print("預測的標簽是:") print(output_labels)
說明:這里需要注意的地方有:
- 圖像要調整到網絡輸入一致的大小,即224×224
- 將【高,寬,通道】要轉換成【通道,高,寬】的格式
- 輸入的是【batchsize,C,H,W】,因此我們要增加一個batchsize維度
- 之前訓練好的模型是使用cuda(),因此要將模型和數據放在GPU中
- 一定要轉換狀態,即model.eval()
結果:

下一節,可視化相應的特征圖。
