日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > 卷积神经网络 >内容正文

卷积神经网络

卷积神经网络模型之——VGG-16网络结构与代码实现

發(fā)布時間:2023/12/31 卷积神经网络 98 豆豆
生活随笔 收集整理的這篇文章主要介紹了 卷积神经网络模型之——VGG-16网络结构与代码实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • VGGNet簡介
  • VGG16網(wǎng)絡(luò)結(jié)構(gòu)
  • 使用pytorch搭建VGG16
    • features
    • classifier
    • 完整代碼

VGGNet簡介

VGG原文:Very deep convolutional networks for large-scale image recognition:https://arxiv.org/pdf/1409.1556.pdf


VGG在2014年由牛津大學(xué)Visual GeometryGroup提出,獲得該年lmageNet競賽中Localization Task(定位任務(wù))第一名和 Classification Task (分類任務(wù))第二名。

VGG與AlexNet相比,它采用幾個連續(xù)的3x3的卷積核代替AlexNet中的較大卷積核。

在VGG中,使用了3個3x3卷積核來代替7x7卷積核,使用了2個3x3卷積核來代替5*5卷積核,從而在保證具有相同感知野的條件下,提升了網(wǎng)絡(luò)的深度,在一定程度上提升了神經(jīng)網(wǎng)絡(luò)的效果。

在論文中,作者嘗試了使用5種不同的網(wǎng)絡(luò)結(jié)構(gòu),深度分別為11,11,13,16,19,5種結(jié)構(gòu)圖如下所示:

其中最常用的是VGG16和VGG19,下面我們就以VGG16為例來分析它的網(wǎng)絡(luò)結(jié)構(gòu)。

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

VGG16中的16指的是它由16層組成(13個卷積層 + 3個全連接層,不包括池化層)。

VGG的輸入圖像大小為224X224X3的三通道彩色圖像,共有1000個類別。

其中卷積層的卷積核大小都為3,padding為1;池化層的kernel_size為2,stride為2。

因此

  • 卷積層只改變特征圖的通道數(shù),不改變大小。(W - 3 + 2*1)/ 1 + 1 = W
  • 池化層不改變特征圖的通道數(shù),大小變?yōu)樵瓉淼囊话搿?/li>

VGG具有明顯的塊結(jié)構(gòu),VGG可以分為如下六塊:

  • 兩個卷積 + 一個池化:conv3-64+conv3-64 + maxpool
  • 兩個卷積 + 一個池化:conv3-128+conv3-128+ maxpool
  • 三個卷積 + 一個池化:conv3-256+conv3-256+conv3-256+ maxpool
  • 三個卷積 + 一個池化:conv3-512+conv3-512+conv3-512+ maxpool
  • 三個卷積 + 一個池化:conv3-512+conv3-512+conv3-512+ maxpool
  • 三個全連接:fc-4096 + fc-4096 + fc-1000(對應(yīng)1000個類別)
  • 使用pytorch搭建VGG16

    為了便于理解,我們把正向傳播過程分為兩塊,

    • 一塊為特征提取層(features),包括13個卷積層;
    • 另一塊為分類層(classify),包括3個全連接層。

    features

    def make_features(self):cfgs = [64, 64, 'MaxPool', 128, 128, 'MaxPool', 256, 256, 256, 'MaxPool', 512, 512, 512, 'MaxPool', 512, 512, 512, 'MaxPool']layers = []in_channel = 3for cfg in cfgs:if cfg == "MaxPool": # 池化層layers += [nn.MaxPool2d(kernel_size=2,stride=2)]else:layers += [nn.Conv2d(in_channels=in_channel,out_channels=cfg,kernel_size=3,padding=1)]layers += [nn.ReLU(True)]in_channel = cfgreturn nn.Sequential(*layers)

    classifier

    【注意】:在進行全連接之前,需要現(xiàn)將卷積層輸出的三維特征圖展平為1維。

    x = torch.flatten(x,start_dim=1)

    self.classifier = nn.Sequential(nn.Linear(512 * 7 * 7, 4096),nn.ReLU(True),nn.Dropout(p=0.5),nn.Linear(4096, 4096),nn.ReLU(True),nn.Dropout(p=0.5),nn.Linear(4096, 1000) )

    完整代碼

    """ #-*-coding:utf-8-*- # @author: wangyu a beginner programmer, striving to be the strongest. # @date: 2022/7/1 15:01 """ import torch import torch.nn as nnclass VGG(nn.Module):def __init__(self):super(VGG, self).__init__()self.features = self.make_features()self.classifier = nn.Sequential(nn.Linear(512 * 7 * 7, 4096),nn.ReLU(True),nn.Dropout(p=0.5),nn.Linear(4096, 4096),nn.ReLU(True),nn.Dropout(p=0.5),nn.Linear(4096, 1000))def forward(self,x):x = self.features(x)x = torch.flatten(x,start_dim=1)x = self.classifier(x)return xdef make_features(self):cfgs = [64, 64, 'MaxPool', 128, 128, 'MaxPool', 256, 256, 256, 'MaxPool', 512, 512, 512, 'MaxPool', 512, 512, 512, 'MaxPool']layers = []in_channel = 3for cfg in cfgs:if cfg == "MaxPool": # 池化層layers += [nn.MaxPool2d(kernel_size=2,stride=2)]else:layers += [nn.Conv2d(in_channels=in_channel,out_channels=cfg,kernel_size=3,padding=1)]layers += [nn.ReLU(True)]in_channel = cfgreturn nn.Sequential(*layers)net = VGG() print(net)

    總結(jié)

    以上是生活随笔為你收集整理的卷积神经网络模型之——VGG-16网络结构与代码实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。