我一直在学习卷积神经网络。在查看Keras
示例时,我遇到了三种不同的卷积方法。即,1D、2D 和 3D。这三层有什么区别?他们的用例是什么?是否有一些链接或参考来展示他们的用例?
Convolutional1D、Convolutional2D 和 Convolutional3D 之间有什么区别?
唯一的区别是输入空间的维度。卷积层的输入具有以下形状:
input_shape = (batch_size,input_dims,channels)
conv1D的输入形状:(batch_size,W,channels)
示例:以 44100 Hz 采样的 1 秒立体声语音信号,形状:(batch_size,44100,2)
conv2D的输入形状:(batch_size,(H,W),channels)
示例:32x32 RGB 图像,形状:(batch_size,32,32,3)
conv3D的输入形状:(batch_size,(H,w,D),channels)
示例(更棘手):24 fps 的 32x32 RGB 图像的 1 秒视频,形状:(batch_size,32,32,3,24)
什么是渠道?
关键是要考虑通道对我们的输入数据意味着什么。卷积层为每个通道应用不同的过滤器,因此,卷积层的权重具有以下形状:
(kernel_size,num_channels,num_filter_per_channels)
例子:
具有 12 个滤波器和大小为 3 的方核矩阵的卷积层。该层将为每个通道应用 12 个不同的滤波器。在前面给出的示例中:
以 44100 Hz 采样的 1 秒立体声语音信号,kernel_size = 3
12 x 2 = 24 个一维滤波器,每个通道 12 个滤波器
Weigths shape: (3, 2, 12)
32x32 RGB 图像,kernel_size = (3,3)
12 x 3 = 36 个二维滤波器,每个通道 12 个滤波器
Weights shape: (3, 3, 3, 12)
24 fps 的 32x32 RGB 图像的 1 秒视频,kernel_size = (3,3,3)
24 x 12 = 288 个三维滤波器,每个通道 12 个滤波器
Weights shape: (3, 3, 3, 24, 12)
因此,决定一个通道的含义非常重要,因为每个通道都有自己的一组过滤器。对于第一个示例,确定立体声信号和 RGB 图像是不同的通道似乎很简单……它们通常是这样命名的(立体声通道,RGB 通道)。在视频示例中,它更加模棱两可...将视频设置为 3D 输入,时间维度为通道可能不是最佳选择,因为这样一来,时间帧的顺序无关紧要(输出每个通道的滤波器相加)导致丢失输入数据的内在时间动态。一种更好的方法(取决于应用程序)是在循环神经网络中使用 2D 卷积处理 RGB 图像。语音信号也是如此,
需要注意的是,输入维度为 D 的信号可以被视为具有一个通道的 D+1 维度的信号,但生成的特征空间可能不太具有代表性/有用性:
(44100,2) --> expand_dimension(axis=-1)--> ((44100,2),1)
支持示例的 Keras 代码
from keras import Input, Conv1D, Conv2D, Conv3D
#1D
in_ = Input(shape=(44100,2))
layer = Conv1D(filters=12,kernel_size=3)
out_ = layer(in_)
print("Weights shape: {}".format(layer.get_weights()[0].shape))
#2D
in_ = Input(shape=(32,32,3))
layer = Conv2D(filters=12,kernel_size=3)
out_ = layer(in_)
print("Weights shape: {}".format(layer.get_weights()[0].shape))
#3D
in_ = Input(shape=(32,32,3,24))
layer = Conv3D(filters=12,kernel_size=3)
out_ = layer(in_)
print("Weights shape: {}".format(layer.get_weights()[0].shape))
Conv1D用于类似于语音的输入信号。通过使用它们,您可以找到信号中的模式。例如,你有一个语音信号,你有一个卷积层。每个卷积通过使用成本函数遍历语音以找到有意义的模式。
Conv2D用于图像。这个用例很受欢迎。用于该层的卷积方法称为卷积卷积。这意味着您有一个包含多个通道的二维图像,以 RGB 为例。在这种情况下,每个卷积滤波器应该是一个三维滤波器,实际上是与图像进行卷积、互相关,以在图像中找到合适的模式。
Conv3D通常用于每个时间跨度都有一个帧的视频。这些层通常比之前的层有更多的参数需要学习。我们叫他们的原因是除了每一帧的图像之外,还有另一个称为时间的轴,其中包含离散值,并且每个轴都对应于特定的帧。