欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python深度學習pytorch神經網(wǎng)絡塊的網(wǎng)絡之VGG

 更新時間:2021年10月11日 11:22:54   作者:Supre_yuan  
雖然AlexNet證明深層神經網(wǎng)絡卓有成效,但它沒有提供一個通用的模板來指導后續(xù)的研究人員設計新的網(wǎng)絡。下面,我們將介紹一些常用于設計深層神經網(wǎng)絡的啟發(fā)式概念

與芯片設計中工程師從放置晶體管到邏輯元件再到邏輯塊的過程類似,神經網(wǎng)絡結構的設計也逐漸變得更加抽象。研究人員開始從單個神經元的角度思考問題,發(fā)展到整個層次,現(xiàn)在又轉向模塊,重復各層的模式。

使用塊的想法首先出現(xiàn)在牛津大學的視覺幾何組(visualgeometry Group)(VGG)的VGG網(wǎng)絡中。通過使用循環(huán)和子程序,可以很容易地在任何現(xiàn)代深度學習框架的代碼中實現(xiàn)這些重復的結構。

VGG塊

經典卷積神經網(wǎng)絡的基本組成部分是下面的這個序列:

1.帶填充以保持分辨率的卷積層

2.非線性激活函數(shù),如ReLU

3.匯聚層,如最大匯聚層

而一個VGG塊與之類似,由一系列卷積層組成,后面再加上用于空間下采樣的最大匯聚層。

在最初的VGG論文中,作者使用了帶有 3 × 3卷積核、填充為1(保持高度和寬度)的卷積層,和帶有 2 × 2 池化窗口、步幅為2(每個塊后的分辨率減半)的最大匯聚層。

在下面的代碼中,我們定義了一個名為vgg_block的函數(shù)來實現(xiàn)VGG塊。

該函數(shù)有三個參數(shù),分別對應于卷積層的數(shù)量num_convs、輸入通道的數(shù)量in_channels和輸出通道的數(shù)量out_channels。

import torch
from torch import nn
from d2l import torch as d2l

def vgg_block(num_convs, in_channels, out_channels):
	layers = []
	for _ in range(num_convs):
		layers.append(nn.Conv2d(in_channels, out_channels, kernel_size = 3, padding=1))
		leyers.append(nn.ReLU())
		in_channels = out_channels
	layers.append(nn.MaxPool2d(kernel_size=2, stride=2))
	return nn.Sequential(*layers)

VGG網(wǎng)絡

與AlexNet、LeNet一樣,VGG網(wǎng)絡可以分為兩個部分:第一部分主要由卷積層和匯聚層組成,第二部分由全連接層組成。如下圖所示:

在這里插入圖片描述

VGG神經網(wǎng)絡連續(xù)連接上圖的幾個VGG塊(在vgg_block函數(shù)中定義)。其中有超參數(shù)變量conv_arch。該變量指定了每個VGG塊里的卷積層的個數(shù)和輸出通道數(shù)。全連接模塊則與AlexNet中的相同。

原始VGG網(wǎng)絡中有5個卷積塊,其中前兩個塊各有一個卷積層,后三個塊包含兩個卷積層。第一個模塊有64個輸出通道,每個后續(xù)模塊將輸出通道數(shù)量翻倍,直到數(shù)字達到512。由于該網(wǎng)絡使用8個卷積層和3個全連接層,因此它通常被稱為VGG-11。

conv_arch = ((1, 64), (1, 128), (2, 256), (2, 512), (2, 512))

下面的代碼實現(xiàn)了VGG-11??梢酝ㄟ^在conv_arch上執(zhí)行for循環(huán)來簡單實現(xiàn)。

def vgg(conv_arch):
	conv_blks = []
	in_channels = 1
	# 卷積層部分
	for (num_convs, out_channels) in conv_arch:
		conv_blks.append(vgg_block(num_convs, in_cannels, out_channels))
		in_channels = out_channels

	return nn.Sequential(
		*conv_blks, nn.Flatten(),
		# 全連接層部分
		nn.Linear(out_channels * 7 * 7, 4096), nn.ReLU(), nn.Dropout(0.5),
		nn.Linear(4096, 4096), nn.ReLU(), nn.Dropout(0.5),
		nn.Linear(4096, 10)
	)

net = vgg(conv_arch)

接下來,我們將構建一個高度和寬度為224的單通道數(shù)據(jù)樣本,以觀察每個層輸出的形狀。

X = torch.randn(size=(1, 1, 224, 224))
for blk in net:
	X = blk(X)
	print(blk.__class__.__name__, 'output shape: \t', X.shape)
Sequential output shape: torch.Size([1, 64, 112, 112])
Sequential output shape: torch.Size([1, 128, 56, 56])
Sequential output shape: torch.Size([1, 256, 28, 28])
Sequential output shape: torch.Size([1, 512, 14, 14])
Sequential output shape: torch.Size([1, 512, 7, 7])
Flatten output shape: torch.Size([1, 25088])
Linear output shape: torch.Size([1, 4096])
ReLU output shape: torch.Size([1, 4096])
Dropout output shape: torch.Size([1, 4096])
Linear output shape: torch.Size([1, 4096])
ReLU output shape: torch.Size([1, 4096])
Dropout output shape: torch.Size([1, 4096])
Linear output shape: torch.Size([1, 10])

我們在每個塊的高度和寬度減半,最終高度和寬度都為7。最后再展平表示,送入全連接層處理。

訓練模型

由于VGG-11比AlexNet計算量更大,因此我們構建了一個通道數(shù)較少的網(wǎng)絡,足夠用于訓練Fashion-MNIST數(shù)據(jù)集。

ratio = 4
small_conv_arch = [(pair[0], pair[1] // ratio) for pair in conv_arch]
net = vgg(small_conv_arch)

除了使用略高的學習率外,模型訓練過程與AlexNet類似。

lr, num_epochs, batch_size = 0.05, 10, 128

train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size, resize=224)
d2l.train_ch6(net, train_iter, test_iter, num_epochs, lr, d2l.try_gpu())
loss 0.175, train axx 0.935, test acc 0.917
2559.6 examples/sec on cuda:0

在這里插入圖片描述

以上就是Python神經網(wǎng)絡塊的網(wǎng)絡之VGG深度學習的詳細內容,更多關于Python神經網(wǎng)絡VGG塊的網(wǎng)絡的資料請關注腳本之家其它相關文章!

相關文章

  • Python配置pip國內鏡像源的實現(xiàn)

    Python配置pip國內鏡像源的實現(xiàn)

    這篇文章主要介紹了Python配置pip國內鏡像源的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • 解決jupyter加載文件失敗的問題

    解決jupyter加載文件失敗的問題

    這篇文章主要介紹了解決jupyter加載文件失敗的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • python 獲取一個值在某個區(qū)間的指定倍數(shù)的值方法

    python 獲取一個值在某個區(qū)間的指定倍數(shù)的值方法

    今天小編就為大家分享一篇python 獲取一個值在某個區(qū)間的指定倍數(shù)的值方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • pyinstaller打包程序后閃退問題的解決方法

    pyinstaller打包程序后閃退問題的解決方法

    這篇文章主要給大家介紹了關于pyinstaller打包程序后閃退問題的解決方法,閃退原因可能有很多這里記錄下我遇到的問題,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • Python使用Matplotlib繪制三維散點圖詳解流程

    Python使用Matplotlib繪制三維散點圖詳解流程

    matplotlib是基建立在python之上,適用于創(chuàng)建靜態(tài),動畫和交互式可視化,通常與數(shù)據(jù)分析模塊pandas搭配使用,用于數(shù)據(jù)的分析和展示,適用于主流的操作系統(tǒng),如Linux、Win、Mac
    2022-11-11
  • Python截圖的五個方法實例總結

    Python截圖的五個方法實例總結

    學習一門語言最好的方法便是實踐,想要拿Python寫一個截圖工具,下面這篇文章主要給大家介紹了關于Python截圖的五個方法,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • pandas 給dataframe添加列名的兩種方法

    pandas 給dataframe添加列名的兩種方法

    DataFrame的單元格可以存放數(shù)值、字符串等,本文主要介紹了pandas 給dataframe添加列名的兩種方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • python 層次聚類算法圖文示例

    python 層次聚類算法圖文示例

    這篇文章主要介紹了python 層次聚類算法圖文示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • python 自定義異常和異常捕捉的方法

    python 自定義異常和異常捕捉的方法

    今天小編就為大家分享一篇python 自定義異常和異常捕捉的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python實現(xiàn)將一個大文件按段落分隔為多個小文件的簡單操作方法

    Python實現(xiàn)將一個大文件按段落分隔為多個小文件的簡單操作方法

    這篇文章主要介紹了Python實現(xiàn)將一個大文件按段落分隔為多個小文件的簡單操作方法,涉及Python針對文件的讀取、遍歷、轉換、寫入等相關操作技巧,需要的朋友可以參考下
    2017-04-04

最新評論