A guide to convolution arithmetic for deep learning

目标

  • 介绍卷积和反卷积的关系
  • 明白 input shape, kernel shape, zero padding, strides , out shape 在卷积,池化,反卷积的关系

1 介绍

1.1 离散卷积

  • 神经网络:放射变换, 输入数组,在乘以一个矩阵加上一个偏置后,得到一个输出。
    • 输入数据类型:图片、声音其他等,都满足多个维度存储,有一个以上的轴来排序数据,并且有一个以上的通道来表述数据。
    • 缺点:没有保存其拓扑信息
  • 离散卷积:线性变换,保存了拓扑信息(数据的排序)
    • 稀疏:一些输入单元信息作用于一个输出单元信息
    • 重复参数:kernel作用于输入数据的不同位置
    • 输入:input feature maps 输出:output feature maps
    • 对于input feature maps ,可以使用不同的kernels,获取多层的output feature maps
      这里写图片描述
    • 用kernel的集合来定义离散卷积:(n, m, k1,…kN)
      • n:input feature maps的数量
      • m:output feature maps的数量
      • kj k j :第j个维度kernel的大小
      • N: N个维度的卷积,常见的二维卷积
    • 对于第j个维度,output feature maps(oj)的大小影响元素
      • ij i j :input featur maps 第j个维度的大小
      • kj k j :kernel 第j个维度的大小
      • sj s j :stride(步幅)第j个维度的大小
      • pj p j :zero-padding(补零)第j个维度的大小
      • 计算公式如下
        • oj=ij+2pjkjsj+1 o j = ⌊ i j + 2 ∗ p j − k j s j ⌋ + 1
    • 步幅(stride):组成二次抽样
      • 比如说s=2,可以看做是s=1的中,只取偶数的实现。

1.2 池化

  • 池化:通过一些对子区域的总结(比如平均、最大值),减小feature maps 的大小(类似离散卷积,把线性操作换成其他的函数)
  • 对于第j个维度,经过池化输出(oj)的大小影响元素
    • ij i j :input featur maps 第j个维度的大小
    • kj k j :池化窗口第j个维度的大小
    • sj s j :stride(步幅)第j个维度的大小
  • 这里写图片描述

2 卷积计算(i, k, s, p)

  • 假设:
    • 2-D discrete convolutions (N= 2)
    • square inputs (i1=i2=i)
    • square kernel size (k1=k2=k)
    • same strides along both axes (s1=s2=s)
    • same zero padding along both axes (p1=p2=p)

2.1 zero padding = 0 and strides = 1

o=(ik)+1 o = ( i − k ) + 1

2.2 zero padding != 0 and strides = 1

o=(ik)+2p+1 o = ( i − k ) + 2 p + 1

half padding (input size = ouput size )

k=2n+1;s=1;p=k2 k = 2 n + 1 ; s = 1 ; p = ⌊ k 2 ⌋

o=(ik)+2p+1=i+2p(k1)=i+2n2n=i o = ( i − k ) + 2 p + 1 = i + 2 p − ( k − 1 ) = i + 2 n − 2 n = i

full padding

s=1;p=k1 s = 1 ; p = k − 1

o=(ik)+2p+1=i+(k1) o = ( i − k ) + 2 p + 1 = i + ( k − 1 )

2.3 zero padding = 0 and strides > 1

o=iks+1 o = ⌊ i − k s ⌋ + 1

2.4 zero padding != 0 and strides > 1

o=i+2pks+1 o = ⌊ i + 2 p − k s ⌋ + 1

如果j = i + a, a >0 and a < s,那么以j为输入的大小计算的输出的大小 = 以i为输入的大小计算的输出的大小

3. 池化计算

o=iks+1 o = ⌊ i − k s ⌋ + 1

4. 反卷积计算

  • 假设:
    • 2-D discrete convolutions (N= 2)
    • square inputs (i1=i2=i)
    • square kernel size (k1=k2=k)
    • same strides along both axes (s1=s2=s)
    • same zero padding along both axes (p1=p2=p)

4.1 卷积作为一种矩阵操作

  • 例如当i=4,k=3,s=1,p=0:
    • 可以将输入矩阵平铺成(16,1)的矩阵X
    • kernel平铺成(4,16)的矩阵C
    • 最终的结果为Y= CX,即一个(4,1)的矩阵,再resize为(2,2)
  • 卷积的正向过程是乘以了 C C ,反向过程乘以了CT

4.2 反卷积

  • transposed convolution; fractionally strided convolution; deconvolution
  • kernel 决定了卷积,但是正向和反向的计算决定了是卷积还是反卷积
  • 反卷积的正向过程是乘以了 CT C T ,反向过程乘以了 (CT)T=C ( C T ) T = C
  • 卷积是 Y=CX Y = C X , 反卷积是 CTY=CTCX=X C T Y = C T C X = X

4.3 zero padding = 0 and strides = 1 反卷积

  • 卷积 i=4,k=3,s=1,p=0,所以o = 2
  • 反卷积 i=o,k=k,s=s,p=k-1,所以o = i + (k - 1)

4.4 zero padding != 0 and strides = 1 反卷积

  • 反卷积k=k,s=s,p=k-p-1,所以o = i + (k - 1) -2p
  • half padding, transposed
    • 卷积 k=2n+1;s=1;p=k2 k = 2 n + 1 ; s = 1 ; p = ⌊ k 2 ⌋
    • 反卷积 k=k,s=s,p=p
    • = i + (k - 1) - 2p = i
  • full padding, transposed
    • 卷积 k;s=1;p=k1 k ; s = 1 ; p = k − 1
    • 反卷积 k=k,s=s,p=0
    • = i + (k - 1) - 2p = i - (k - 1)

4.5 zero padding = 0 and strides > 1 反卷积

  • 卷积 k;s;p=0 k ; s ; p = 0
  • 反卷积 k=k,s=1,p=k-1(输入的每个单元之间加了s-1个0)
  • o=s( i- 1) + k

4.5 zero padding != 0 and strides > 1 反卷积

  • 卷积 k;s;p k ; s ; p
  • 反卷积 k=k,s=1,p=k-p-1(输入的每个单元之间加了s-1个0)
    • if( i+2p-k) %s == 0 :
      • o=s( i- 1) + k - 2p
    • if( i+2p-k) %s!= 0
      • 设 a = ( i+2p-k) mod s
      • o=s( i- 1) + a + k - 2p

5. 扩展卷积 dilated convolution

  • 约束因子 d:
    • d = 1 :常规卷积
    • d > 1: kernel每个单元格之间加入(d-1)个空的元素,计算公式 k=k+(k1)(d1) k = k + ( k − 1 ) ∗ ( d − 1 )
  • 扩展卷积计算 输出大小
    o=i+2pk(k1)(d1)s+1 o = ⌊ i + 2 p − k − ( k − 1 ) ∗ ( d − 1 ) s ⌋ + 1

这里写图片描述

ps:

  • 线性linear,指量与量之间按比例、成直线的关系,在数学上可以理解为一阶导数为常数的函数
  • 非线性non-linear则指不按比例、不成直线的关系,一阶导数不为常数。
  • 虽然以上介绍的是2维的且是正方形的,但是也可以推广到多维和非正方形。
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MATLAB深度学习工具箱中的Convolution3DLayer是一种用于三维卷积操作的神经网络层。它可以在三维空间中对输入进行卷积操作,并生成相应的特征图。Convolution3DLayer通常用于处理带有深度信息的数据,例如视频或三维图像数据。 Convolution3DLayer是深度学习模型中的关键组件之一。它通过应用一组可学习的卷积核对输入三维数据进行卷积操作。这些卷积核用于提取输入数据中的不同特征,并生成特征图。特征图可以表示输入数据的不同抽象级别的特征,从低级特征到高级语义特征。 Convolution3DLayer具有一些重要的参数,包括卷积核大小、步幅、填充等。这些参数可以在构建模型时进行设置,以满足特定任务的要求。此外,Convolution3DLayer也具有参数共享的特性,即同一组卷积核在不同空间位置进行共享。这种共享可以显著减少模型的参数量,降低计算复杂度,并增强模型的泛化能力。 Convolution3DLayer通常与其他类型的层结合使用,如池化层、批归一化层和激活函数层。通过使用这些层,可以构建更复杂的深度学习模型,以实现更高级的任务,如目标识别、目标检测和视频分割等。 在使用MATLAB深度学习工具箱时,通过调用Convolution3DLayer函数可以方便地创建和配置Convolution3DLayer层。调用trainNetwork函数可以对整个深度学习模型进行训练和优化。此外,借助其他工具箱中的函数和方法,还可以对模型进行评估和推理,以获得相应的预测结果。 总的来说,MATLAB深度学习工具箱中的Convolution3DLayer是一个强大的工具,可以在三维空间中对输入数据进行卷积操作,并用于构建和训练具有深度感知能力的神经网络模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值