为了观察每个过程的维度变化,我写了一些print操作,其实维度变化已经很明显了,下面来具体计算一下每个维度是怎么计算的到的
第0层:网络的输入[1, 1, 32, 32],其中第一维是batch_size, 第二维是input_channel,后面两维是数据的大小,
第1层:卷积层(convolution layer).第一层使用的卷积核大小为[5, 5],卷积核(filter)的输出深度为6(output_channel),使用不填充,步长为1.不填充的情况下,输出的矩阵大小为32 -5 + 1 = 28.因此第一层卷积输出的feature_map的大小为[28, 28, 6].
第2层:池化层(pooling layer). 池化层过滤器大小[2, 2],步长为2.第二层的输出维度(28-2)/2 + 1(括号里面的“2”是kernel的对应维度, “/2”的2是步长)。因此第二层的的大小为[14,14,6].
后面的维度以此类推了。
Conv2d也具有自己的输入和输出,例如(batch_size, channel, height,)
class paddle.nn.Conv2D(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, padding_mode='zer
二维卷积层
该OP是二维卷积层(convolution2d layer),根据输入、卷积核、步长(stride)、填充(padding)、空洞大小(dilations)一组参数计算输出特征层大小。输入和输出是NCHW或NHWC格式,其中N是批尺寸,C是通道数,H是特征高度,W是特征宽度。卷积核是MCHW格式,M是输出图像通道数,C是输入图像通道数,H是卷积核高度,W是卷积核宽度。如果组数(groups)大于1,C等于输入图像通道数除以组数的结果。详情请参考UFLDL's : 卷积 。如果bias_attr不为False,卷积计算会添加偏置项。
os', weight_attr=None, bias_attr=None, data_format='NCHW')