最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Pytorch使用VGG16模型進行預(yù)測貓狗二分類實戰(zhàn)

 更新時間:2023年08月02日 09:02:58   作者:山河亦問安  
VGG16是Visual Geometry Group的縮寫,它的名字來源于提出該網(wǎng)絡(luò)的實驗室,本文我們將使用PyTorch來實現(xiàn)VGG16網(wǎng)絡(luò),用于貓狗預(yù)測的二分類任務(wù),我們將對VGG16的網(wǎng)絡(luò)結(jié)構(gòu)進行適當(dāng)?shù)男薷?以適應(yīng)我們的任務(wù),需要的朋友可以參考下

1. VGG16

1.1 VGG16 介紹

深度學(xué)習(xí)已經(jīng)在計算機視覺領(lǐng)域取得了巨大的成功,特別是在圖像分類任務(wù)中。VGG16是深度學(xué)習(xí)中經(jīng)典的卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)之一,由牛津大學(xué)的Karen Simonyan和Andrew Zisserman在2014年提出。VGG16網(wǎng)絡(luò)以其深度和簡潔性而聞名,是圖像分類中的重要里程碑。

VGG16是Visual Geometry Group的縮寫,它的名字來源于提出該網(wǎng)絡(luò)的實驗室。VGG16的設(shè)計目標(biāo)是通過增加網(wǎng)絡(luò)深度來提高圖像分類的性能,并展示了深度對于圖像分類任務(wù)的重要性。VGG16的主要特點是將多個小尺寸的卷積核堆疊在一起,從而形成更深的網(wǎng)絡(luò)。

1.1.1 VGG16 網(wǎng)絡(luò)的整體結(jié)構(gòu)

VGG16網(wǎng)絡(luò)由多個卷積層和全連接層組成。它的整體結(jié)構(gòu)相對簡單,所有的卷積層都采用小尺寸的卷積核(通常為3x3),步幅為1,填充為1。每個卷積層后面都會跟著一個ReLU激活函數(shù)來引入非線性。

VGG16網(wǎng)絡(luò)主要由三個部分組成:

  1. 輸入層:接受圖像輸入,通常為224x224大小的彩色圖像(RGB)。

  2. 卷積層:VGG16包含13個卷積層,其中包括五個卷積塊。

  3. 全連接層:在卷積層后面是3個全連接層,用于最終的分類。

VGG16網(wǎng)絡(luò)結(jié)構(gòu)如下圖:

1、一張原始圖片被resize到(224,224,3)。
2、conv1兩次[3,3]卷積網(wǎng)絡(luò),輸出的特征層為64,輸出為(224,224,64),再2X2最大池化,輸出net為(112,112,64)。
3、conv2兩次[3,3]卷積網(wǎng)絡(luò),輸出的特征層為128,輸出net為(112,112,128),再2X2最大池化,輸出net為(56,56,128)。
4、conv3三次[3,3]卷積網(wǎng)絡(luò),輸出的特征層為256,輸出net為(56,56,256),再2X2最大池化,輸出net為(28,28,256)。
5、conv4三次[3,3]卷積網(wǎng)絡(luò),輸出的特征層為512,輸出net為(28,28,512),再2X2最大池化,輸出net為(14,14,512)。
6、conv5三次[3,3]卷積網(wǎng)絡(luò),輸出的特征層為512,輸出net為(14,14,512),再2X2最大池化,輸出net為(7,7,512)。
7、利用卷積的方式模擬全連接層,效果等同,輸出net為(1,1,4096)。共進行兩次。
8、利用卷積的方式模擬全連接層,效果等同,輸出net為(1,1,1000)。
最后輸出的就是每個類的預(yù)測。

1.2 Pytorch使用VGG16進行貓狗二分類實戰(zhàn)

在這一部分,我們將使用PyTorch來實現(xiàn)VGG16網(wǎng)絡(luò),用于貓狗預(yù)測的二分類任務(wù)。我們將對VGG16的網(wǎng)絡(luò)結(jié)構(gòu)進行適當(dāng)?shù)男薷模赃m應(yīng)我們的任務(wù)。

1.2.1 數(shù)據(jù)集準(zhǔn)備

首先,我們需要準(zhǔn)備用于貓狗二分類的數(shù)據(jù)集。數(shù)據(jù)集可以從Kaggle上下載,其中包含了大量的貓和狗的圖片。在下載數(shù)據(jù)集后,我們需要將數(shù)據(jù)集劃分為訓(xùn)練集和測試集。訓(xùn)練集文件夾命名為train,其中建立兩個文件夾分別為cat和dog,每個文件夾里存放相應(yīng)類別的圖片。測試集命名為test,同理。

import torch
import torchvision
import torchvision.transforms as transforms
# 定義數(shù)據(jù)轉(zhuǎn)換
transform = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.ToTensor(),
    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])
# 加載數(shù)據(jù)集
train_dataset = ImageFolder("train", transform=transform)
test_dataset = ImageFolder("test", transform=transform)
train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=batch_size)

1.2.2 構(gòu)建VGG網(wǎng)絡(luò)

import torch.nn as nn
class VGG16(nn.Module):
    def __init__(self):
        super(VGG16, self).__init__()
        self.features = nn.Sequential(
            # Block 1
            nn.Conv2d(3, 64, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(64, 64, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2, stride=2),
            # Block 2
            nn.Conv2d(64, 128, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(128, 128, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2, stride=2),
            # Block 3
            nn.Conv2d(128, 256, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(256, 256, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(256, 256, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2, stride=2),
            # Block 4
            nn.Conv2d(256, 512, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2, stride=2),
            # Block 5
            nn.Conv2d(512, 512, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2, stride=2),
        )
        self.classifier = nn.Sequential(
            nn.Linear(512 * 7 * 7, 4096),
            nn.ReLU(inplace=True),
            nn.Dropout(),
            nn.Linear(4096, 4096),
            nn.ReLU(inplace=True),
            nn.Dropout(),
            nn.Linear(4096, 2)  # 輸出層,二分類任務(wù)
        )
    def forward(self, x):
        x = self.features(x)
        x = torch.flatten(x, 1)  # 展開特征圖
        x = self.classifier(x)
        return x
# 初始化VGG16模型
vgg16 = VGG16()

在上述代碼中,我們定義了一個VGG16類,其中self.features部分包含了5個卷積塊,self.classifier部分包含了3個全連接層。

1.2.3 訓(xùn)練和評估模型

import torch.optim as optim
# 定義超參數(shù)
batch_size = 32
learning_rate = 0.001
num_epochs = 10
model = VGG16()
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)
# 定義損失函數(shù)和優(yōu)化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=learning_rate, momentum=0.9)
# 訓(xùn)練模型
total_step = len(train_loader)
for epoch in range(num_epochs):
    for i, (images, labels) in enumerate(train_loader):
        images = images.to(device)
        labels = labels.to(device)
        # 前向傳播
        outputs = model(images)
        loss = criterion(outputs, labels)
        # 反向傳播和優(yōu)化
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        if (i + 1) % 100 == 0:
            print(f"Epoch [{epoch+1}/{num_epochs}], Step [{i+1}/{total_step}], Loss: {loss.item()}")
torch.save(model,'model/vgg16.pth')
# 測試模型
model.eval()
with torch.no_grad():
    correct = 0
    total = 0
    for images, labels in test_loader:
        images = images.to(device)
        labels = labels.to(device)
        outputs = model(images)
        print(outputs)
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()
    print(f"Accuracy on test images: {(correct / total) * 100}%")

在訓(xùn)練模型時,我們使用交叉熵?fù)p失函數(shù)(CrossEntropyLoss)作為分類任務(wù)的損失函數(shù),并采用隨機梯度下降(SGD)作為優(yōu)化器。同時,我們將模型移動到GPU(如果可用)來加速訓(xùn)練過程。

到此這篇關(guān)于Pytorch使用VGG16模型進行預(yù)測貓狗二分類實戰(zhàn)的文章就介紹到這了,更多相關(guān)Pytorch VGG16貓狗二分類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于Python-Pycharm實現(xiàn)的猴子摘桃小游戲(源代碼)

    基于Python-Pycharm實現(xiàn)的猴子摘桃小游戲(源代碼)

    這篇文章主要介紹了基于Python-Pycharm實現(xiàn)的猴子摘桃小游戲,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • python開發(fā)一款翻譯工具

    python開發(fā)一款翻譯工具

    這篇文章主要介紹了如何用python開發(fā)一款翻譯工具,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-10-10
  • python正則表達(dá)式常見的知識點匯總

    python正則表達(dá)式常見的知識點匯總

    正則表達(dá)式提供了一些可用的匹配模式,比如忽略大小寫、多行匹配等,下面這篇文章主要給大家介紹了關(guān)于python正則表達(dá)式常見的知識點,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • Python Datetime模塊和Calendar模塊用法實例分析

    Python Datetime模塊和Calendar模塊用法實例分析

    這篇文章主要介紹了Python Datetime模塊和Calendar模塊用法,結(jié)合實例形式分析了Python日期時間及日歷相關(guān)的Datetime模塊和Calendar模塊原理、用法及操作注意事項,需要的朋友可以參考下
    2019-04-04
  • Python中實現(xiàn)三目運算的方法

    Python中實現(xiàn)三目運算的方法

    這篇文章主要介紹了Python中實現(xiàn)三目運算的方法,本文用and/or 運算符模擬實現(xiàn)三目運算,需要的朋友可以參考下
    2015-06-06
  • pytorch加載預(yù)訓(xùn)練模型與自己模型不匹配的解決方案

    pytorch加載預(yù)訓(xùn)練模型與自己模型不匹配的解決方案

    這篇文章主要介紹了pytorch加載預(yù)訓(xùn)練模型與自己模型不匹配的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python用字節(jié)處理文件實例講解

    python用字節(jié)處理文件實例講解

    在本篇文章里小編給大家整理的是一篇關(guān)于python用字節(jié)處理文件實例講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。
    2021-04-04
  • python框架flask入門之環(huán)境搭建及開啟調(diào)試

    python框架flask入門之環(huán)境搭建及開啟調(diào)試

    這篇文章主要介紹了python框架flask入門環(huán)境搭建及開啟調(diào)試的步驟設(shè)置,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • Flask解決跨域的問題示例代碼

    Flask解決跨域的問題示例代碼

    這篇文章主要介紹了Flask解決跨域的問題示例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • Python性能分析工具py-spy原理用法解析

    Python性能分析工具py-spy原理用法解析

    這篇文章主要介紹了Python性能分析工具py-spy原理用法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07

最新評論

邵武市| 宝应县| 开鲁县| 万宁市| 佳木斯市| 百色市| 东海县| 祁门县| 长沙市| 玛曲县| 凌源市| 新竹县| 衡水市| 德令哈市| 莱西市| 常山县| 家居| 石河子市| 绥滨县| 巴里| 龙南县| 黑河市| 思茅市| 江北区| 鄂尔多斯市| 津南区| 岐山县| 贵溪市| 奎屯市| 革吉县| 福清市| 洛隆县| 南汇区| 象州县| 张家口市| 白玉县| 秦皇岛市| 云浮市| 大荔县| 永清县| 三明市|