我们常用的卷积操作——Conv2d里的参数

 不仔细看代码是真不知道以前的代码都是白跑了,里面的东西根本就没搞懂。

self.conv1 = nn.Conv2d(
                in_planes, planes, kernel_size=3, stride=stride, padding=1, bias=False)
# 我们常用的这句代码,里面的参数到底都代表什么意思呢?
Args:
    in_channels (int): Number of channels in the input image
    out_channels (int): Number of channels produced by the convolution  # 卷积产生的通道数
    kernel_size (int or tuple): Size of the convolving kernel
    stride (int or tuple, optional): Stride of the convolution. Default: 1
    #           整数型 or 元组,可选   : 
    padding (int, tuple or str, optional): Padding added to all four sides of
            the input. Default: 0
    padding_mode (string, optional): ``'zeros'``, ``'reflect'``,
            ``'replicate'`` or ``'circular'``. Default: ``'zeros'``
    # 填充模式:默认以0填充
    dilation (int or tuple, optional): Spacing between kernel elements. Default: 1
    # 控制膨胀卷积                     内核元素之间的间距 
    groups (int, optional): Number of blocked connections from input
            channels to output channels. Default: 1
    # 控制分组卷积      默认不分组,groups=1
    bias (bool, optional): If ``True``, adds a learnable bias to the
            output. Default: ``True``

参数 kernel_size,stride,padding,dilation 都可以是一个整数或者是一个元组,一个值的情况将会同时作用于高和宽 两个维度,两个值的元组情况代表分别作用于维度。

dilation:控制卷积核选的元素之间的间距【可选】默认为1,好像叫膨胀卷积?

1.dilation=1的话(默认情况),效果如图:

2.dilation=2,那么效果如图:

输入是蓝色,绿色是输出,可以看到dilation=1时输入间隔着一个格子。

另外,比如3*3卷积核里面那9个数,一开始是随机初始化后,后面根据loss,不断更新。

参考文献:pytorch之torch.nn.Conv2d()函数详解

### Conv1D与Conv2D的区别及其应用场景 #### 一、基本概念 Conv1D 和 Conv2D 都属于卷积神经网络(CNN)的核心组件,用于提取特征。然而,两者的设计目标不同,分别适用于不同的数据结构。 - **Conv1D** 主要处理一维信号,比如时间序列数据或音频波形[^1]。 - **Conv2D** 则针对二维数据设计,典型的应用场景包括图像分类和对象检测。 #### 二、参数对比 两者的实现均基于相同的底层逻辑,即通过滑动窗口的方式应用卷积核来计算局部响应。以下是具体差异: 1. **输入张量的形状** - 对于 `Conv1D`,其输入通常是一个三维张量 `(batch_size, steps, input_dim)`,其中 `steps` 表示时间步数或者序列长度[^3]。 - 而对于 `Conv2D`,输入则为四维张量 `(batch_size, height, width, channels)`,对应的是图片的高度、宽度以及颜色通道数量。 2. **卷积核尺寸** - 在 `Conv1D` 中,卷积核仅沿单一轴移动,因此它的大小定义为单个整数值,例如 `kernel_size=3` 表明它会考虑连续三个位置上的信息。 - 反之,在 `Conv2D` 的情况下,由于涉及平面区域扫描,则需指定两个方向上的跨度,如 `kernel_size=(3, 3)` 意味着一个 $3 \times 3$ 大小的方形滤镜被用来捕捉空间模式[^2]。 3. **权重矩阵形式** 即使当我们将某些特定条件下的 `Conv1D` 映射到等效的 `Conv2D` 上时——例如设置固定的第二维度宽度并调整相应的 reshape 参数之后——仍然需要注意前者本质上更高效因为减少了不必要的冗余运算。 ```python import tensorflow as tf # Example of using Conv1D model_conv1d = tf.keras.Sequential([ tf.keras.layers.Input(shape=(None, 1)), tf.keras.layers.Conv1D(filters=64, kernel_size=3, activation='relu') ]) # Equivalent transformation to Conv2D with reshaping trick mentioned earlier. input_shape_for_reshaped_data = (..., ..., ...) # Fill according actual case needs here! model_conv2d_equivalent_to_above = tf.keras.Sequential([ tf.keras.layers.Reshape(target_shape=input_shape_for_reshaped_data), tf.keras.layers.Conv2D(filters=64, kernel_size=(3, fixed_second_dimension), strides=(1,1)) ]) ``` 上述代码片段展示了如何从理论上构建一个近似版本的转换关系;但在实践中应优先选用最贴合原始需求类型的层以获得最佳性能表现。 #### 三、适用范围举例说明 - 如果面对的任务是预测股票价格走势这类依赖历史记录的时间序列分析问题,则推荐采用 `Conv1D` 来挖掘潜在规律。 - 当涉及到视觉理解范畴内的挑战,像识别手写数字MNIST数据库的图案类别时,“自然”的选择便是运用 `Conv2D` 提取像素间的关联特性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值