卷积层里面的填充与步幅

 

1、填充

填充(padding)是指在输入高和宽的两侧填充元素(通常是0元素)。图5.2里我们在原输入高和宽的两侧分别添加了值为0的元素,使得输入高和宽从3变成了5,并导致输出高和宽由2增加到4。图5.2中的阴影部分为第一个输出元素及其计算所使用的输入和核数组元素:

 

 下面的例子里我们创建一个高和宽为3的二维卷积层,然后设输入高和宽两侧的填充数分别为1。给定一个高和宽为8的输入,我们发现输出的高和宽也是8。

#comp_conv2d函数负责卷积的计算,里面设置了计算方法以及可以自定义卷积核的大小。填充等相关的参数,x是输入

import torch
from torch import nn

# 定义一个函数来计算卷积层。它对输入和输出做相应的升维和降维
def comp_conv2d(conv2d, X):
    # (1, 1)代表批量大小和通道数(“多输入通道和多输出通道”一节将介绍)均为1
    X = X.view((1, 1) + X.shape)
    Y = conv2d(X)
    return Y.view(Y.shape[2:])  # 排除不关心的前两维:批量和通道

# 注意这里是两侧分别填充1行或列,所以在两侧一共填充2行或列
conv2d = nn.Conv2d(in_channels=1, out_channels=1, kernel_size=3, padding=1#padding表示上下左右个填充一行

X = torch.rand(8, 8)#输入一个8×8的矩阵
comp_conv2d(conv2d, X).shape

输出:

torch.Size([8, 8])

当卷积核的高和宽不同时,我们也可以通过设置高和宽上不同的填充数使输出和输入具有相同的高和宽。

# 使用高为5、宽为3的卷积核。在高和宽两侧的填充数分别为2和1
conv2d = nn.Conv2d(in_channels=1, out_channels=1, kernel_size=(5, 3), padding=(2, 1))
comp_conv2d(conv2d, X).shape

输出:

torch.Size([8, 8])

步幅

 

下面我们令高和宽上的步幅均为2,从而使输入的高和宽减半。

conv2d = nn.Conv2d(1, 1, kernel_size=3, padding=1, stride=2)
comp_conv2d(conv2d, X).shape

输出:

torch.Size([4, 4])

接下来是一个稍微复杂点儿的例子。

conv2d = nn.Conv2d(1, 1, kernel_size=(3, 5), padding=(0, 1), stride=(3, 4))
comp_conv2d(conv2d, X).shape

输出:

torch.Size([2, 2])

TensorFlow中的卷积层是用于处理图像和其他2D数据的常用层。它主要用于提取输入数据的局部特征,通过在输入数据上滑动一个可学习的滤波器(卷积核)来实现。以下是使用TensorFlow创建卷积层的基本步骤: 1. 定义输入张量:首先,您需要定义一个输入张量来表示待处理的数据。这可以是一个图像、特征图或其他2D数据。 2. 定义卷积核:接下来,您需要定义一个卷积核作为卷积操作的参数。卷积核是一个小的二维张量,它包含一些可学习的权重。 3. 创建卷积层:使用TensorFlow的`tf.keras.layers.Conv2D`类可以创建一个卷积层。您可以指定卷积核的数量、大小、步幅填充等参数。 4. 运行卷积操作:将输入张量传递给卷积层,然后通过调用`call`方法执行卷积操作。该方法将返回一个特征图,其中每个值对应输入数据中的一个局部特征。 5. 参数学习:在训练过程中,卷积层中的权重将根据模型的损失函数进行更新,以便自动学习有助于任务的特征。 下面是一个示例代码片段,展示了如何使用TensorFlow创建一个简单的卷积层: ```python import tensorflow as tf # 定义输入张量(假设输入是一张28x28的灰度图像) input_shape = (28, 28, 1) inputs = tf.keras.Input(shape=input_shape) # 创建卷积层 num_filters = 32 kernel_size = (3, 3) conv_layer = tf.keras.layers.Conv2D(num_filters, kernel_size, activation='relu', padding='same') # 执行卷积操作 outputs = conv_layer(inputs) # 打印输出特征图的形状 print(outputs.shape) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值