# codes06009_padding
import paddle
# 1. 定义卷积层计算函数,参数为卷积函数和输入张量,返回输出张量
def compute_conv(conv2d, X=paddle.rand((1,1,5,5))): # 生成5×5的输入,维度为[NCHW]
Y = conv2d(X) # 执行卷积函数
Y = Y.reshape(Y.shape[2:]) # 排除不关心的维度:批量和通道
return Y
# 2. 定义有效卷积函数,padding=0
conv2d_valid = paddle.nn.Conv2D(in_channels=1, out_channels=1, kernel_size=3)
# 3. 定义同等卷积函数,padding=1
conv2d_same = paddle.nn.Conv2D(in_channels=1, out_channels=1, kernel_size=3, padding=1)
# 4. 输出卷积结果
print('有效卷积(padding=0)的形态:{}'.format(compute_conv(conv2d_valid).shape))
print('同等卷积(padding=1)的形态:{}'.format(compute_conv(conv2d_same).shape))
有效卷积(padding=0)的形态:[3, 3] 同等卷积(padding=1)的形态:[5, 5]
# codes06010_PaddingRectangle
# 定义同等卷积函数,卷积核形态为3×5,padding=(1,2)
conv2d_same2 = paddle.nn.Conv2D(in_channels=1, out_channels=1, kernel_size=(3,5), padding=(1,2))
print('同等卷积(kernel=(3,3),padding=(1,1))的形态:{}'.format(compute_conv(conv2d_same).shape))
print('同等卷积(kernel=(3,5),padding=(1,2))的形态:{}'.format(compute_conv(conv2d_same2).shape))
同等卷积(kernel=(3,3),padding=(1,1))的形态:[5, 5] 同等卷积(kernel=(3,5),padding=(1,2))的形态:[5, 5]
# codes06011_Stride
# 定义同等卷积函数,卷积核形态为3×3,stride=2
conv2d_whole = paddle.nn.Conv2D(in_channels=1, out_channels=1, kernel_size=3, padding=1, stride=2)
print('同等卷积(stride=2,input=[6,6])的形态:{}'.format(compute_conv(conv2d_whole,X=paddle.rand((1,1,6,6))).shape))
同等卷积(stride=2,input=[6,6])的形态:[3, 3]
# codes06012_StrideDifferent
# 定义同等卷积函数,卷积核形态为3×3,stride=(2,3)
conv2d_whole2 = paddle.nn.Conv2D(in_channels=1, out_channels=1, kernel_size=3, padding=1, stride=(2,3))
print('同等卷积(stride=(1,1),input=[5,5])的形态:{}'.format(compute_conv(conv2d_same).shape))
print('同等卷积(stride=(2,3),input=[5,5])的形态:{}'.format(compute_conv(conv2d_whole2).shape))
同等卷积(stride=(1,1),input=[5,5])的形态:[5, 5] 同等卷积(stride=(2,3),input=[5,5])的形态:[3, 2]