各维度卷积神经网络内容收录
卷积神经网络(CNN),通常是指用于图像分类的2D CNN。但是,现实世界中还使用了其他两种类型的卷积神经网络,即1D CNN和3D CNN。
- 在1D CNN中,内核沿1个方向移动。1D CNN的输入和输出数据是2维的。主要用于NLP领域,时间序列数据。
-
在2D CNN中,内核沿2个方向移动。2D CNN的输入和输出数据是3维的。主要用于CV领域,图像数据(在视频的处理中,是对每一帧图像分别利用CNN来进行识别,没有考虑时间维度的信息)。
-
在3D CNN中,内核在3个方向上移动。3D CNN的输入和输出数据是4维的。通常用于3D 图像数据(MRI,CT扫描)。
气象数据,譬如温度(time,level,lat,lon),既具有时间维又有空间维,那用1D还是2D呢,有的神经网络使用1D CNN,有的2D CNN
因为是时间序列,RNN序列结构的网络更适合,用1D CNN还是2D CNN, 关键在于:通过数据预处理,将数据处理成适合于1D CNN还是2D
CNN。此外,气象数据,其有多个时间序列的子特征,因此建议用2D CNN 。
卷积中:
维度是指特征矩阵的channel数,例如7x7x256,其深度是256
通过一个1x1,卷积核个数为64的Conv层,其高和宽保持不变,channel变为64
所以,降维和升维指的是特征矩阵channel数的降低和增加
池化中:
降维是指特征图尺寸的减小,如4x4减小为2x2
维度包含多种含义,例如在卷积层中,每一层都可以识别一些信息,越往后的信息就叫高维信息
一维CNN | Conv1D
Conv1D广泛应用于感官数据,加速度计 数据就是其中之一。即在Conv1D中,内核沿一维滑动。考虑哪种类型的数据仅需要内核在一个维度上滑动并具有空间特性?时间序列数据,让我们看以下数据。
来自 加速度计 的序列数据
该数据是从人戴在手臂上的 加速度计 中收集的,数据表示XYZ三个轴的加速度。一维CNN可以根据 加速度计 数据执行活动识别任务,例如人的身姿,行走,跳跃等。
此数据有2个维度:第一维是时间步长,第二维是XYZ轴上的加速度值。
下图说明了内核如何在 加速度计 数据上移动,每行代表某个轴的时间序列加速度,内核只能沿时间轴一维移动。
内核在 加速度计 上滑动
python
# Keras中的Conv1D层
import keras
from keras.layers import Conv1D
model = keras.models.Sequential()
model.add(Conv1D(1, kernel_size=5, input_shape = (120, 3)))
model.summary()
参数input_shape(120,3)表示120个时间步,每个时间步中有3个数据点。这3个数据点是XYZ轴的加速度,参数kernel_size为5,表示内核的宽
度,内核的高度将与每个时间步中的数据点数相同。同样,一维CNN也可用于音频和文本数据因为我们还可以将声音和文本表示为时间序列数据。
请参考下面的图片,文本数据作为时间序列
二维CNN | Conv2D
在Lenet-5架构中首次引入的标准卷积神经网络,其Conv2D通常用于图像数据,之所以称其为2维CNN,是因为内核在数据上沿2维滑动。
内核在图像上滑动
使用CNN的整体优势在于,它可以使用其内核从数据中提取空间特征,而其他网络则无法做到。
例如:CNN可以检测图像中的边缘,颜色分布等 ,这使得CNN网络在图像分类和包含空间属性的其他类似数据中非常强大。
python
# 以下是在keras中添加Conv2D图层的代码。
import keras
from keras.layers import Conv2D
model = keras.models.Sequential()
model.add(Conv2D(1, kernel_size=(3,3), input_shape = (128, 128, 3)))
model.summary()
参数input_shape(128、128、3)表示图像的(高度,宽度,深度)。参数kernel_size(3,3)表示内核的(高度,宽度),并且内核深度将与图像的深度相同。
三维CNN | Conv3D
在Conv3D中,内核按3个维度滑动,让我们再考虑一下哪种数据类型需要内核在3维上移动?Conv3D主要用于3D图像数据,例如磁共振成像(MRI)数据,MRI数据被广泛用于检查大脑,脊髓,内部器官等。甲计算机断层扫描(CT)扫描也是三维数据,这是通过组合从身体周围的不同角度拍摄的一系列X射线图像创建的一个例子,我们可以使用Conv3D对该医学数据进行分类或从中提取特征。
内核在3D数据上滑动
python
# 以下是在keras中添加Conv3D层的代码。
import keras
from keras.layers import Conv3D
model = keras.models.Sequential()
model.add(Conv3D(1, kernel_size=(3,3,3), input_shape = (128, 128, 128, 3)))
model.summary()
这里参数Input_shape(128,128,128,3)有4个维度,3D图像是4维数据,其中第四维代表颜色通道的数量,就像平面2D图像具有3维一样,其中3维代表色彩通道。参数kernel_size(3,3,3)表示内核的(高度,宽度,深度),并且内核的第4维与颜色通道相同。
了解更多知识请戳下: