Theano中conv2d多通道理解

前言

因为最近在自学CNN,在认识了卷积的一些基本概念后,对卷积过程中的一些过程有困惑,故想借助theano的conv2d函数加深理解。

问题

首先,对于conv2d的输入,第一层的输入往往是[多少张图片,RGB通道数,图片有多少行,图片有多少列], 权重的形状往往是[卷积核数量,三层特征图数,卷积核宽,卷积核高]。

假设输入图片是[1, 2, 1, 5],权重是[2,2,1,2],那么卷积的结果是[1, 2, 1, 4]。

明明权重是2*2个1*2,为什么最后得到的特征图数会更前面的卷积核数相同?

其实我们说的卷积核一般都是三维的,它是[上一层特征图数,宽,高]。进行卷积运算后还有一个求和的运算,这才是完整的conv2d。

实验

测试代码如下:

inputs = T.tensor4(name='input', dtype='float64')

w_shp = (2, 1, 1, 2)
W = theano.shared(
    np.asarray(
        [
            [[[1., 1.]],
             [[1., 1.]]],
            [[[2., 2.]],
             [[1., 1.]]]
        ],
        dtype=inputs.dtype),
    name='W')

conv_out = conv2d(inputs, W)

f = theano.function([inputs], conv_out)

i = np.asarray([
    [[[1., 2., 3., 4., 5.]],
     [[1., 2., 3., 4., 5.]]]
], dtype='float64')
ii = f(i)
print(i.shape)
print(W.get_value().shape)
print(ii)
print(ii.shape)
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

输出的结果如下: 
这里写图片描述

输入为(1,2,3,4,5),(1,2,3,4,5) 
对于第一个卷积核(1,1)(1,1)得到的结果为(3,5,7,9),(3,5,7,9),两个相加就是第一个输出(6,10,14,18)。

总结

刚开始学,没有深入了解细节很多时候都会走弯路。特别是刚开始是用的是MNIST的单通道的进行学习,一旦用三通道的就开始傻了。

### Conv2D 默认参数配置 在深度学习框架中,`Conv2D` 是一种常用的卷积层实现方式。以下是 `Conv2D` 的默认参数设置及其含义: #### 1. **filters** - 表示输出空间的维数(即卷积核的数量)。默认情况下,具体数量取决于模型定义者的选择,在某些框架中可能未提供固定默认值。 #### 2. **kernel_size** - 定义了卷积窗口的高度和宽度,默认通常为 `(3, 3)` 或其他常见大小如 `(1, 1)`、`(5, 5)` 等[^1]。 #### 3. **strides** - 卷积步幅的长度,默认通常是 `(1, 1)`,这意味着每次滑动操作会移动一个像素位置。 #### 4. **padding** - 控制输入数据的填充模式,默认值一般为 `"valid"`,表示不进行任何填充;另一种常用选项是 `"same"`,它会在边界上添加零填充以保持输出形状不变。 #### 5. **data_format** - 指定输入张量的数据格式,默认为 `'channels_last'`,意味着通道维度位于最后一个轴上(适用于 TensorFlow 后端),而 'channels_first' 则将其置于第一个轴上(更适合 Theano 用户)。 #### 6. **activation** - 应用于该层输出的一个激活函数名字符串或可调用对象,默认无显式的激活函数应用(None),但可以通过后续 Dense 层引入非线性变换。 #### 7. **use_bias** - 布尔标志指示是否应向输出添加偏置项,默认设为 True。 #### 8. **kernel_initializer** 和 **bias_initializer** - 这两个属性分别指定了权重矩阵与偏差矢量如何被初始化的方法,默认采用 Glorot uniform initializer 方式来完成这一过程[^3]。 #### 9. **activity_regularizer** - 可选活动正则化实例应用于当前层输出,默认为空(即没有额外施加约束条件)。 以上就是关于 Conv2D 函数或者层的一些典型默认设定情况概述。值得注意的是不同版本之间可能存在细微差异,请始终查阅官方文档获取最新最权威的信息源。 ```python from tensorflow.keras.layers import Conv2D layer = Conv2D( filters=32, kernel_size=(3, 3), strides=(1, 1), padding='valid', data_format=None, dilation_rate=(1, 1), activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros' ) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值