AlexNet网络结构详解及网络结构的实现(pytorch)

文章目录

    • 1.论文地址:
    • 2.前置知识:
    • 3.分组卷积的参数量和计算量的计算方式:
    • 4.AlexNet网络结构:
    • 5.卷积过程:
      • (1)第一层卷积:
      • (2)第二层卷积:
      • (3)第三层卷积:
      • (4)第四层卷积:
      • (5)第五层卷积:
      • (6)全连接层:
      • (7)全连接层:
      • (8)输出层:
    • 6.pytorch网络结构:
      • (1)源码:
      • (2)网络结构细节:

1.论文地址:

http://www.cs.toronto.edu/~fritz/absps/imagenet.pdf

2.前置知识:

Tensorflow中的padding操作和Pytorch中的padding操作:
参考博文:
https://blog.csdn.net/qq_37541097/article/details/114303828

3.分组卷积的参数量和计算量的计算方式:

参考博文:
https://www.cnblogs.com/hejunlin1992/p/12978988.html

4.AlexNet网络结构:

AlexNet网络结构详解及网络结构的实现(pytorch)_第1张图片
因为AlexNet是放在两块GPU上进行训练的,所以你看到的上图是分为上下两部分,并且上部分和下部分是一样的,所以上部分看到的是不完整的。
但是下面我在讲解这个卷积过程的时候也只讨论在一块GPU上的卷积过程(包括图解)。
AlexNet网络结构详解及网络结构的实现(pytorch)_第2张图片

更直观和详细的卷积过程:
AlexNet网络结构详解及网络结构的实现(pytorch)_第3张图片

AlexNet网络结构详解及网络结构的实现(pytorch)_第4张图片

5.卷积过程:

首先需要输入的图像大小为:227x227x3的彩色图像:(图解上面有问题)

(1)第一层卷积:

AlexNet网络结构详解及网络结构的实现(pytorch)_第5张图片
filter:11x11x48,stride=4,padding=0
output_size=(input_size+2xpadding-kernel_size)/stride+1=(227+2x0-11)/4+1=55
输出:55x55x48

参数量:(11x11x3+1)x48x2=34944
计算量:34944x55x55=105705600
激活函数:ReLU.

池化:使用3x3,stride=2的池化单元进行最大池化操作(步长小于池化单元大小,采用重叠池化):
output_size=(input_size+2xpadding-pool_size)/stride+1=(55+2x0-3)/2+1=27.每一组的输出为27x27x48.


(2)第二层卷积:

AlexNet网络结构详解及网络结构的实现(pytorch)_第6张图片

filter:5x5x128,stride=1,padding=2
output_size=(input_size+2xpadding-kernel_size)/stride+1=(27+2x2-5)/1+1=27
输出:27x27x128

参数量:(5x5x48+1)x128x2=307456
计算量:307456x27x27=224135424
激活函数:ReLU.

池化:使用3x3,stride=2的池化单元进行最大池化操作(步长小于池化单元大小,采用重叠池化):
output_size=(input_size+2xpadding-pool_size)/stride+1=(27+2x0-3)/2+1=13.每一组的输出为13x13x128.


(3)第三层卷积:

AlexNet网络结构详解及网络结构的实现(pytorch)_第7张图片

filter:13x13x192,stride=1,padding=1
output_size=(input_size+2xpadding-kernel_size)/stride+1=(13+2x2-5)/1+1=13
输出:13x13x192

参数量:(3x3x256+1)x192x2=885120
计算量:885120x13x13=149585280
激活函数:ReLU.


(4)第四层卷积:

AlexNet网络结构详解及网络结构的实现(pytorch)_第8张图片

filter:13x13x192,stride=1,padding=1
output_size=(input_size+2xpadding-kernel_size)/stride+1=(13+2x2-5)/1+1=13
输出:13x13x192

参数量:(3x3x192+1)x192x2=663936
计算量:663936x13x13=112205184
激活函数:ReLU.


(5)第五层卷积:

AlexNet网络结构详解及网络结构的实现(pytorch)_第9张图片

filter:13x13x128,stride=1,padding=1
output_size=(input_size+2xpadding-kernel_size)/stride+1=(13+2x2-5)/1+1=13
输出:13x13x128

参数量:(3x3x192+1)x128x2=442624
计算量:442624x13x13=74803456
激活函数:ReLU.

池化:使用3x3,stride=2的池化单元进行最大池化操作(步长小于池化单元大小,采用重叠池化):
output_size=(input_size+2xpadding-pool_size)/stride+1=(13+2x0-3)/2+1=6.每一组的输出为6x6x128.


(6)全连接层:

AlexNet网络结构详解及网络结构的实现(pytorch)_第10张图片
全连接:输入为6×6×256;
filter: 1x1x2048;
对6×6×256进行卷积,由于卷积核尺寸与输入的尺寸完全相同,即卷积核中的每个系数只与输入尺寸的一个像素值相乘一一对应,根据公式:(input_size + 2 * padding - kernel_size) / stride + 1=(6+2*0-6)/1+1=1,得到输出是1x1x2048,即有2048个神经元。
激活函数:ReLU。
Dropout:随机的断开全连接层某些神经元的连接,通过不激活某些神经元的方式防止过拟合。4096个神经元也被均分到两块GPU上进行运算。

参数量:(6x6x256+1)x4096=37752832
计算量: 37752832


(7)全连接层:

AlexNet网络结构详解及网络结构的实现(pytorch)_第11张图片

全连接:输入为2048;即有2048个神经元。
激活函数:ReLU。
Dropout:随机的断开全连接层某些神经元的连接,通过不激活某些神经元的方式防止过拟合。4096个神经元也被均分到两块GPU上进行运算。

参数量:(4096+1)x4096=16781312
计算量: 16781312


(8)输出层:

AlexNet网络结构详解及网络结构的实现(pytorch)_第12张图片
全连接:输入为4096个神经元,输出是1000个神经元。这1000个神经元即对应1000个检测类别。
Softmax:这1000个神经元的运算结果通过Softmax函数中,输出1000个类别对应的预测概率值。

参数量: 1000x4096=4096000
计算量:4096000


所有层总的参数量:
34944 + 307456 + 885120 + 663936 + 442624 + 37752832 + 16781312 + 4096000 = 60964224


6.pytorch网络结构:

(1)源码:

import os
import torch
from torchvision import models
from torchsummary import summary

model_AlexNet=torch.nn.Sequential(
    torch.nn.Conv2d(in_channels=3,out_channels=48,kernel_size=(11,11),stride=(4,4),padding=0),
    torch.nn.ReLU(inplace=True),
    torch.nn.BatchNorm2d(num_features=48),
    torch.nn.MaxPool2d(kernel_size=(3,3),stride=(2,2)),

    torch.nn.Conv2d(in_channels=48,out_channels=128,kernel_size=(5,5),stride=(1,1),padding=2),
    torch.nn.ReLU(inplace=True),
    torch.nn.BatchNorm2d(num_features=128),
    torch.nn.MaxPool2d(kernel_size=(3,3),stride=(2,2)),

    torch.nn.Conv2d(in_channels=128,out_channels=192,kernel_size=(3,3),stride=(1,1),padding=1),
    torch.nn.ReLU(inplace=True),
    torch.nn.BatchNorm2d(num_features=192),

    torch.nn.Conv2d(in_channels=192,out_channels=192,kernel_size=(3,3),stride=(1,1),padding=1),
    torch.nn.ReLU(inplace=True),
    torch.nn.BatchNorm2d(num_features=192),

    torch.nn.Conv2d(in_channels=192,out_channels=128,kernel_size=(3,3),stride=(1,1),padding=1),
    torch.nn.ReLU(inplace=True),
    torch.nn.BatchNorm2d(num_features=128),
    torch.nn.MaxPool2d(kernel_size=(3,3),stride=(2,2)),

    torch.nn.ReLU(inplace=True),
    torch.nn.Dropout(0.5),

    torch.nn.Flatten(),

    torch.nn.Linear(in_features=128*6*6,out_features=2048),
    torch.nn.ReLU(inplace=True),
    torch.nn.Dropout(0.5),

    torch.nn.Linear(in_features=2048,out_features=1000),
    torch.nn.Softmax()
)
model=summary(model_AlexNet,(3,227,227))

(2)网络结构细节:

AlexNet网络结构详解及网络结构的实现(pytorch)_第13张图片
AlexNet网络结构详解及网络结构的实现(pytorch)_第14张图片

你可能感兴趣的:(学习中的一点总结,python,计算机视觉)