基於Pytorch實現貓狗分類
from __future__ import print_function, division
from PIL import Image
from torchvision import transforms
import torch.nn.functional as F
import torch
import torch.nn as nn
import torch.nn.parallel
# 定義網路
class ConvNet(nn.Module):
def __init__(self):
super(ConvNet, self).__init__()
self.conv1 = nn.Conv2d(3, 32, 3)
self.max_pool1 = nn.MaxPool2d(2)
self.conv2 = nn.Conv2d(32, 64, 3)
self.max_pool2 = nn.MaxPool2d(2)
self.conv3 = nn.Conv2d(64, 64, 3)
self.conv4 = nn.Conv2d(64, 64, 3)
self.max_pool3 = nn.MaxPool2d(2)
self.conv5 = nn.Conv2d(64, 128, 3)
self.conv6 = nn.Conv2d(128, 128, 3)
self.max_pool4 = nn.MaxPool2d(2)
self.fc1 = nn.Linear(4608, 512)
self.fc2 = nn.Linear(512, 1)
def forward(self, x):
in_size = x.size(0)
x = self.conv1(x)
x = F.relu(x)
x = self.max_pool1(x)
x = self.conv2(x)
x = F.relu(x)
x = self.max_pool2(x)
x = self.conv3(x)
x = F.relu(x)
x = self.conv4(x)
x = F.relu(x)
x = self.max_pool3(x)
x = self.conv5(x)
x = F.relu(x)
x = self.conv6(x)
x = F.relu(x)
x = self.max_pool4(x)
# 展開
x = x.view(in_size, -1)
x = self.fc1(x)
x = F.relu(x)
x = self.fc2(x)
x = torch.sigmoid(x)
return x
# 模型儲存路徑
model_save_path = 'E:\\Cat_And_Dog\\kaggle\\model.pth'
# ------------------------ 載入資料 --------------------------- #
# Data augmentation and normalization for training
# Just normalization for validation
# 定義預訓練變換
# 資料預處理
transform_test = transforms.Compose([
transforms.Resize(100),
transforms.RandomVerticalFlip(),
transforms.RandomCrop(50),
transforms.RandomResizedCrop(150),
transforms.ColorJitter(brightness=0.5, contrast=0.5, hue=0.5),
transforms.ToTensor(),
transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
])
class_names = ['cat', 'dog'] # 這個順序很重要,外匯跟單gendan5.com要和訓練時候的類名順序一致
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
# ------------------------ 載入模型並且訓練 --------------------------- #
model = torch.load(model_save_path)
model.eval()
# print(model)
image_PIL = Image.open('E:\\Cat_And_Dog\\kaggle\\cats_and_dogs_small\\test\\cats\\cat.1500.jpg')
#
image_tensor = transform_test(image_PIL)
# 以下語句等效於 image_tensor = torch.unsqueeze(image_tensor, 0)
image_tensor.unsqueeze_(0)
# 沒有這句話會報錯
image_tensor = image_tensor.to(device)
out = model(image_tensor)
pred = torch.tensor([[1] if num[0] >= 0.5 else [0] for num in out]).to(device)
print(class_names[pred])
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2776017/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Pytorch實現分類器PyTorch
- 基於pytorch實現模型剪枝PyTorch模型
- CNN+pytorch實現文字二分類CNNPyTorch
- 深度學習(二)之貓狗分類深度學習
- 基於Tensorflow + Opencv 實現CNN自定義影像分類OpenCVCNN
- 基於PyTorch框架的多層全連線神經網路實現MNIST手寫數字分類PyTorch框架神經網路
- 基於sklearn的分類器實戰
- 圖卷積神經網路分類的pytorch實現卷積神經網路PyTorch
- 5.AlexNet貓狗分類(Lightning框架)框架
- 貓狗大戰--使用 “VGG16進行CIFAR10分類” 遷移學習實現遷移學習
- 輕鬆學Pytorch-使用ResNet50實現影像分類PyTorch
- 《機器學習實戰》基於樸素貝葉斯分類演算法構建文字分類器的Python實現機器學習演算法文字分類Python
- Pytorch筆記之 多層感知機實現MNIST資料集分類PyTorch筆記
- 如何基於TensorFlow使用LSTM和CNN實現時序分類任務CNN
- 基於HttpClient實現Http訪問工具類HTTPclient
- 基於pytorch的深度學習實戰PyTorch深度學習
- [原始碼解析]PyTorch如何實現前向傳播(1) --- 基礎類(上)原始碼PyTorch
- [原始碼解析]PyTorch如何實現前向傳播(2) --- 基礎類(下)原始碼PyTorch
- 【NLP】TensorFlow實現CNN用於文字分類(譯)CNN文字分類
- 基於註解的 PHP 列舉類實現PHP
- 基於SWT的類XUL實現: SWT-XUIUI
- 基於深度學習的回聲消除系統與Pytorch實現深度學習PyTorch
- 基於pytorch實現Resnet對本地資料集的訓練PyTorch
- 基於Sharding-Jdbc 實現的讀寫分離實現JDBC
- 使用pytorch快速搭建神經網路實現二分類任務(包含示例)PyTorch神經網路
- TF2.keras 實現基於卷積神經網路的影象分類模型TF2Keras卷積神經網路模型
- TF2.keras 實現基於卷積神經網路的影像分類模型TF2Keras卷積神經網路模型
- 基於支援向量機的文字分類文字分類
- 使用sklearn實現svm--用於機械故障分類
- 【NLP】TensorFlow實現CNN用於中文文字分類CNN文字分類
- 【Pytorch】基於卷積神經網路實現的面部表情識別PyTorch卷積神經網路
- 基於celeba資料集和pytorch框架實現dcgan的人臉影像生成PyTorch框架
- TF2.keras 實現基於深度可分離卷積網路的影象分類模型TF2Keras卷積模型
- TF2.keras 實現基於深度可分離卷積網路的影像分類模型TF2Keras卷積模型
- 一個分數類的實現——Rational類
- 使用LabVIEW實現基於pytorch的DeepLabv3影像語義分割ViewPyTorch
- 1.CNN圖片單標籤分類(基於TensorFlow實現基礎VGG16網路)CNN
- 【小白學PyTorch】15 TF2實現一個簡單的服裝分類任務PyTorchTF2