卷积运算

卷积层

卷积的本质是用卷积核的参数来提取数据的特征,通过矩阵点乘运算与求和运算来得到结果。

下面给出一个基本的二维卷积的运算过程,即 y = ω x + b y = \omega x + b y=ωx+b

卷积运算_第1张图片

  • 特征图 ( x x x) 的大小为 1 x 5 x 5, 输入的通道数为 1.
  • 卷积核 ( ω \omega ω) 大小为 3 x 3
  • 偏置( b b b)为 1
    为了保证输入的维度和输出的维度一致,还需要填充 (padding) 这里使用的 zeros-padding, 即用 0 来填充

使用 Pytorch 实现 卷积计算

import torch
import torch.nn as nn

conv = nn.Conv2d(in_channels=1, out_channels=1, kernel_size=3, stride=1, padding=1, dilation=1, groups=1, bias=True)

Conv2d() 的参数介绍

  1. in_channels: 输入特征图的通道数,如何是 RGB 图像, 则通道数为 3. 卷积中的特征图通道数一般是 2 的整数次幂.
  2. out_channels: 输出特征图的通道数
  3. kernel_size: 卷积核的尺寸,常见的有 1、3、5、7.
  4. stride: 步长,即卷积核在特征图上滑动的步长,一般为 1. 如果大于 1,则输出特征图的尺寸会小于输入的特征图尺寸.
  5. padding: 填充,常见有 0 填充,边缘填充等,Pytorch 默认零填充
  6. dilation:空洞卷积,当大于 1 时可以增大感受野的同时保持特征图的尺寸, 默认为 1
  7. groups:可实现组卷积,即在卷积操作时不是逐点卷积,而是将输入通达分为多个组,稀疏连接达到降低计算量的目的.
  8. bias: 是否需要偏置, 默认 True

总结:

  1. 输入数据体的尺寸是  W 1 × H 1 × D 1 W_1 \times H_1 \times D_1 W1×H1×D1
  2. 4 个超参数: 滤波器的数量 K,滤波器空间尺寸 F,滑动步长 S,零填充的数量 P.
  3. 输出数据体的尺寸是  W 2 × H 2 × D 2 W_2 \times H_2 \times D_2 W2×H2×D2,其中
    W 2 = W 1 − F + 2 P S , H 2 = H 1 − F + 2 P S + 1 , D 2 = K W_2 = \frac{W_1 - F + 2P}{S},H_2 = \frac{H_1-F+2P}{S} + 1, D_2 = K W2=SW1F+2PH2=SH1F+2P+1,D2=K
  4. 由于参数共享,每个滤波器包含的权重数目为 F × F × D 1 F \times F \times D_1 F×F×D1,卷积层一共有 F × F × D 1 × K F \times F \times D_1 \times K F×F×D1×K 个权重和 K K K 个偏置.
  5. 在输出的数据中第 d d d 个深度切片 (空间尺寸是 W 2 × H 2 W_2 \times H_2 W2×H2) 用第 d d d 个滤波器和输入数据进行有效卷积运算的解雇再加上 d d d 个偏置.

你可能感兴趣的:(深度学习)