pytorch卷积层与池化层输出的尺寸的计算公式详解

pytorch卷积层与池化层输出的尺⼨的计算公式详解pytorch卷积层与池化层输出的尺⼨的计算公式详解
要设计卷积神经⽹络的结构,必须匹配层与层之间的输⼊与输出的尺⼨,这就需要较好的计算输出尺⼨
杭州现代汽修学校
先列出公式:
卷积后,池化后尺⼨计算公式:
(图像尺⼨-卷积核尺⼨ + 2*填充值)/步长+1
(图像尺⼨-池化窗尺⼨ + 2*填充值)/步长+1
即:
卷积神将⽹络的计算公式为:
N=(W-F+2P)/S+1
其中
N:输出⼤⼩
W:输⼊⼤⼩
F:卷积核⼤⼩
P:填充值的⼤⼩
S:步长⼤⼩
例Conv2d(后⾯给出实例来讲解计算⽅法):
`
Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
卷积⼀层的⼏个参数:
in_channels=3:表⽰的是输⼊的通道数,RGB型的通道数是3.
out_channels:表⽰的是输出的通道数,设定输出通道数(这个是可以根据⾃⼰的需要来设置的)
kernel_size=12:表⽰卷积核的⼤⼩是12x12的,也就是上⾯的 F=12
stride=4:表⽰的是步长为4,也就是上⾯的S=4
padding=2:表⽰的是填充值的⼤⼩为2,也就是上⾯的P=2
实例:
cove1d:⽤于⽂本数据,只对宽度进⾏卷积,对⾼度不进⾏卷积
cove2d:⽤于图像数据,对宽度和⾼度都进⾏卷积
import torch
from torch.autograd import Variable
#torch.autograd提供了类和函数⽤来对任意标量函数进⾏求导。
as nn
汇源果汁债务压顶
functional as F
class MNISTConvNet(nn.Module):
def __init__(self):
super(MNISTConvNet, self).__init__()
'''
这是对继承⾃⽗类的属性进⾏初始化。⽽且是⽤⽗类的初始化⽅法来初始化继承的属性。
也就是说,⼦类继承了⽗类的所有属性和⽅法,⽗类属性⾃然会⽤⽗类⽅法来进⾏初始化。
'''
#定义⽹络结构
self.pool1 = nn.MaxPool2d(2, 2)
self.pool2 = nn.MaxPool2d(2, 2)
self.fc1 = nn.Linear(320, 50)
self.fc2 = nn.Linear(50, 10)
def forward(self, input):
x = self.v1(input)))
x = self.v2(x))).view(320)
x = self.fc2(self.fc1(x))
return x
net = MNISTConvNet()
print(net)
input = Variable(torch.randn(1, 1, 28, 28))
out = net(input)
print(out.size())
我们在这个实例中抽出⽹络结构部分:
self.pool1 = nn.MaxPool2d(2, 2)
self.pool2 = nn.MaxPool2d(2, 2)
self.fc1 = nn.Linear(320, 50)
self.fc2 = nn.Linear(50, 10)
def forward(self, input):
x = self.v1(input)))
x = self.v2(x))).view(320)
x = self.fc2(self.fc1(x))
⽹络结构为:
conv2d--maxpool2d--conv2d--maxpool2d--fullyconnect--fullyconnect
输⼊图⽚⼤⼩为:input = Variable(torch.randn(1, 1, 28, 28))
即28*28的单通道图⽚,即:12828新闻的定义
接下来,我们分层解析每⼀层⽹络的输⼊和输出:
(1)conv2d(1,10,5)
N:输出⼤⼩
W:输⼊⼤⼩ 28*28
F:卷积核⼤⼩ 5*5
P:填充值的⼤⼩ 0默认值
S:步长⼤⼩ 1默认值
N=(W-F+2P)/S+1=(28-5 + 2*0)/1 + 1 = 24
输出为:10*24*24
Conv2d(输⼊通道数, 输出通道数, kernel_size(长和宽)),当卷积核为⽅形时,只写⼀个就可以,卷积核不是⽅形时,长和宽都要写,如下:
(2)MaxPool2d(2, 2)
MaxPool 最⼤池化层,池化层在卷积神经⽹络中的作⽤在于特征融合和降维。池化也是⼀种类似的卷积操作,只是池化层的所有参数都是超参数,是学习不到的。maxpooling有局部不变性⽽且可以提取显著特征的同时降低模型的参数,从⽽降低模型的过拟合。只提取了显著特征,⽽舍弃了不显著的信息,是的模型的参数减少了,从⽽⼀定程度上可以缓解过拟合的产⽣。
MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)
N:输出⼤⼩
W:输⼊⼤⼩ 24*24
F:卷积核⼤⼩ 5*5
P:填充值的⼤⼩ 0默认值
S:步长⼤⼩ 1默认值
N=(W-F+2P)/S+1=(24-2 + 2*0)/2 + 1 = 12
输出为:10*12*12
(3)conv2d(10,20,5)
N:输出⼤⼩
W:输⼊⼤⼩ 12*12
F:卷积核⼤⼩ 5*5
P:填充值的⼤⼩ 0默认值
S:步长⼤⼩ 1默认值
N=(W-F+2P)/S+1=(12-5 + 2*0)/1 + 1 = 8
输出为:20*8*8
(4)MaxPool2d(2, 2)
N:输出⼤⼩
W:输⼊⼤⼩ 8*8
F:卷积核⼤⼩ 5*5
P:填充值的⼤⼩ 0默认值
S:步长⼤⼩ 1默认值大数据风控的营销
烧芭
N=(W-F+2P)/S+1=(8-2 + 2*0)/2 + 1 = 4
输出为:20*4*4
(5)fully-connect Linear(320, 50)
输⼊:20*4*4=320
输出:50
(6)fully-connect Linear(50, 10)
输⼊:50
输出:10
所以,整个实例的训练过程数据流动为:
def forward(self, input):
x = self.v1(input)))
红围脖客户端x = self.v2(x)))
x = self.fc2(self.fc1(x))
激活函数Relu,在神经⽹络中的作⽤是:通过加权的输⼊进⾏⾮线性组合产⽣⾮线性决策边界
简单的来说就是增加⾮线性作⽤。
在深层卷积神经⽹络中使⽤激活函数同样也是增加⾮线性,主要是为了解决sigmoid函数带来的梯度消失问题。

本文发布于:2024-09-22 11:30:08,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/475005.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:卷积   函数   输出   参数   数据   池化层
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议