0. CNN处理的一维、二维和三维数据

CNN最常用于处理二维的图片数据,但是也可以用于处理一维和三维的数据。

处理不同维度数据的输入输出形式如下所示:

一维cnn二分类 cnn 一维数据_二维


(1)一维数据一维数据常见的是时序数据,如下图

一维cnn二分类 cnn 一维数据_二维_02

一维输入一维cnn二分类 cnn 一维数据_一维cnn二分类_03中的一维cnn二分类 cnn 一维数据_数据_04代表batch size,一维cnn二分类 cnn 一维数据_ide_05代表通道的数量, 一维cnn二分类 cnn 一维数据_ide_06代表信号序列的长度。

(2)二维数据

二维数据常见的是图片数据,如下图:

一维cnn二分类 cnn 一维数据_数据_07

二维输入一维cnn二分类 cnn 一维数据_数据_08中的一维cnn二分类 cnn 一维数据_数据_04代表batch size, 一维cnn二分类 cnn 一维数据_ide_05代表通道的数量, 一维cnn二分类 cnn 一维数据_二维_11是输入的二维数据的像素高度, W_{in}是输入的二维数据的像素宽度。

(3)三维数据

三维数据常见的是点云数据,如下图:

一维cnn二分类 cnn 一维数据_ide_12

三维输入一维cnn二分类 cnn 一维数据_二维_13中的一维cnn二分类 cnn 一维数据_数据_04代表batch size, 一维cnn二分类 cnn 一维数据_ide_05代表通道的数量, 一维cnn二分类 cnn 一维数据_二维_16代表三维数据的深度,一维cnn二分类 cnn 一维数据_二维_11是输入的三维数据的高度, W_{in}是输入的三维数据的宽度。

1. torch.nn.Conv1d和MaxPool1d

Conv1d()函数就是利用指定大小的一维卷积核对输入的多通道一维输入信号进行一维卷积操作的卷积层。

函数:

class torch.nn.Conv1d(
		in_channels, 
		out_channels, 
		kernel_size, 
		stride=1, 
		padding=0, 
		dilation=1, 
		groups=1, 
		bias=True)

一维cnn二分类 cnn 一维数据_二维_18

一维cnn二分类 cnn 一维数据_二维_18out_channels (int) – 输出通道个数 。有多少个out_channels,就需要多少个一维卷积(也就是卷积核的数量)

一维cnn二分类 cnn 一维数据_二维_18

一维cnn二分类 cnn 一维数据_二维_18stride (int or tuple, optional) – 卷积操作的步长。 默认:1

一维cnn二分类 cnn 一维数据_二维_18

一维cnn二分类 cnn 一维数据_二维_18

一维cnn二分类 cnn 一维数据_二维_18groups (int, optional) – 输入通道与输出通道之间相互隔离的连接的个数。 默认:1

一维cnn二分类 cnn 一维数据_二维_18bias (bool, optional) – 如果被置为True,向输出增加一个偏差量,此偏差是可学习参数。 默认:True

torch.nn.Conv1d只对最后一维一维cnn二分类 cnn 一维数据_二维_26进行卷积操作,具体的计算方法为:

一维cnn二分类 cnn 一维数据_数据_27

MaxPool1d只对输入的最后一维进行最大池化:

比如使用nn.MaxPool1d(kernel_size=2)会使得最后一维的输出维数减半。

2. torch.nn.Conv2d和MaxPool2d

该函数是利用指定大小的二维卷积核对输入的多通道二维输入信号进行二维卷积操作的卷积层。

class torch.nn.Conv2d(
	in_channels, 
	out_channels, 
	kernel_size, 
	stride=1, 
	padding=0, 
	dilation=1, 
	groups=1, 
	bias=True)

两个维度的计算方法一样:
一维cnn二分类 cnn 一维数据_数据_27

用MaxPool2d会对输入的最后两维都进行最大池化。

2. torch.nn.Conv3d和MaxPool3d

class torch.nn.Conv3d(
	in_channels, 
	out_channels, 
	kernel_size, 
	stride=1, 
	padding=0, 
	dilation=1, 
	groups=1, 
	bias=True)

三个维度的计算方法一样:
一维cnn二分类 cnn 一维数据_数据_27

用MaxPool3d会对输入的最后三维都进行最大池化。