【防忘笔记】卷积层输入输出大小计算

卷积输出大小计算方法

tensorflow中的常用卷积操作API

正向卷积:Conv2D()

举例:

... Conv2D(128, kernel_size=4, padding="same") # 128个过滤器(128维),卷积核大小为4,边缘填充 # 注:此处步长为默认值1,此时使用padding="same",输出数据的形状会保持不变(与输入一致) #    若步长不为1,则根据计算公式计算(后面会介绍) 

升采样:UpSampling2D()

举例:

... model.add(Reshape((7, 7, 128)))# Reshape成以下形状 model.add(UpSampling2D())# 上采样,对数据进行插值,形状变成之前的两倍 --->(None, 14, 14, 128) ... 

pytorch中的常用卷积操作API

正向卷积:nn.Conv2d()

举例:

nn.Conv2d(256, 512, 4, stride=1, bias=False), ... # 输入256通道,输出512通道,卷积核为4,步长为1 # 注:这里的"通道"指卷积操作之后得到的"特征图"的数量,而不是数据的形状 #    数据形状计算按照公式 

转置卷积:nn.ConvTranspose2d()【对应tf的tf.nn.conv2d_transpose】

举例:

nn.ConvTranspose2d(256, 128, 4, stride=2, bias=False) ... # 输入256通道,输出128通道,卷积核为4,步长为2,逻辑与Conv2d()类似 

卷积操作输入输出数据形状的计算方法

假设输入是一个正方形,宽度与高度相等

那么计算卷积输出大小的公式是:

【防忘笔记】卷积层输入输出大小计算

L形括号的意义是取括号内数值的数学下限

例如:2.3 --> 2

例子:

# 输入形状是28,28,1 # 16个过滤器(16维),卷积核大小为3,步数2,边缘填充         model.add(Conv2D(16, kernel_size=3, strides=2, input_shape=self.img_shape, padding="same"))         model.add(LeakyReLU(alpha=0.2))         model.add(Dropout(0.25))          '''         这里的输出需要计算         [(14-3)+2]/2+1=6.5+1=6+1=7(下取整)         因此,经过下面卷积层后,数据的形状为(None, 7, 7, 32)         '''         model.add(Conv2D(32, kernel_size=3, strides=2, padding="same"))# (None, 7, 7, 32) 

同样的,若输出是方形张量,则计算转置卷积输出大小的公式是:

【防忘笔记】卷积层输入输出大小计算

发表评论

相关文章