卷积神经网络大小计算
卷积神经网络大小计算
众所周知,卷积神经网络的卷积运算有两个非常重要的控制神经网络中每一层的参数操作:填充与步幅。在pytorch中,它们往往通过以下方式被使用:
nn.Conv2d(1, 96, kernel_size=11, stride=4, padding=1)
该方法表示加入卷积层,这个卷积层的输入通道数量为1,输出通道数量为96,卷积核的大小为11,步幅为4,填充为1。
假设输入层的参数为\((c_{in}, i_h, i_w)\),这三个数字分别表示输入通道数,输入形状的长,输入形状的宽。
假设输出层的参数为\((c_{out}, o_h, o_w)\),这三个数字分别表示输出通道数,输出形状的长,输出形状的宽。
假设卷积运算的参数为\((c_{in}, c_{out}, size, s, p)\),分别表示输入通道数,输出通道数,卷积核大小,步幅,填充。
它们满足以下表达式:
\[o_h = \frac{i_h + p *2 + 1 - size}{s}
\]
\[o_w = \frac{i_w + p *2 + 1 - size}{s}
\]
我们通过程序验算:
导入torch包
import torch
from torch import nn
构造一个卷积运算
net = nn.Sequential(
nn.Conv2d(1, 96, kernel_size=11, stride=4, padding=1))
输出大小
X = torch.randn(1, 1, 224, 224)
for layer in net:
X = layer(X)
print(layer.__class__.__name__, 'output shape:\t', X.shape)
最后得到输出形状:Conv2d output shape: torch.Size([1, 96, 54, 54]),和预计相符。

浙公网安备 33010602011771号