一维卷积(1D-CNN)、二维卷积(2D-CNN)、三维卷积(3D-CNN)

一维卷积神经网络(1D-CNN)

一维卷积常用在序列模型、自然语言处理领域;

假设输入数据维度为8,filter维度为5;

不加padding时,输出维度为4,如果filter的数量为16,那么输出数据的shape就是4\times16


二维卷积神经网络(2D-CNN)

二维卷积常用在计算机视觉、图像处理领域(在视频的处理中,是对每一帧图像分别利用CNN来进行识别,没有考虑时间维度的信息);

假设原始图像 shape 为14\times14\times3(其中3为3个通道),使用32个大小为5\times5\times3(其中3为深度,与通道数相同)的卷积核对其进行卷积,得到特征图的shape为10\times10\times32


三维卷积神经网络(3D-CNN)

在神经网络的输入中增加时间这个维度(连续帧),神经网络就可以同时提取时间和空间特征,进行行为识别、视频处理;

比如:对3幅连续帧用三维卷积核进行卷积,可以理解为用3个不同的二维卷积核(二维卷积神经网络中使用的卷积核)卷积3张图,并将卷积结果相加(通过这种处理,网络就提取了时间之间的某种相关性);

三维卷积神经网络的训练和卷积神经网络的训练方式相同;参考:深度网络的训练过程与方法

在文献《3D Convolutional Neural Networks for Human Action Recognition》中三维卷积与二维卷积的对比图如下:

  

上图的三维卷积是对连续的三帧图像进行卷积操作(堆叠多个连续帧组成一个立方体,在立方体中利用三维卷积核进行卷积,这样得到的每个特征map都与上一层中3个邻近的连续帧相连);

三维卷积神经网络架构如下图:

input:7张大小为60\times40的连续帧;

hardwired,H1:通过设定的hardwired kernels获得5种特征(灰度、x方向梯度、y方向梯度、x方向光流、y方向光流),前三个特征可以对每帧分别操作获得,光流则需要利用2帧信息获得,所以H1层特征map数量为7+7+7+6+6=33;

convolution C2:3D卷积核的大小为7\times7\times3(3为时间维度),即每次操作3帧图像,采用了2种不同的3D卷积核,增加了maps数量;

sub-sampling S3:按照图中降采样后maps数量保持不变,maps大小减半;

 

更多《计算机视觉与图形学》知识,可关注下方公众号:

<think>嗯,用户想了解一维卷积神经网络(1D-CNN)用于分类的教程和实现。首先,我需要回顾一下1D-CNN的基本概念和应用场景。1D-CNN通常用于处理序列数据,比如时间序列、文本或者信号数据。和2D-CNN不同,1D-CNN卷积核只在一个方向上滑动,适合提取局部特征。 接下来,用户可能需要一个简单的教程,包括模型构建、训练和评估的步骤。我应该考虑使用常见的框架,比如TensorFlow或PyTorch,这里可能选择Keras,因为它比较简洁,适合教学。然后,需要生成示例代码,比如处理一个时间序列分类任务,使用合成数据或者公开数据集,比如UCI Human Activity Recognition数据集。 然后,我需要确保代码的正确性,包括数据预处理、模型结构、编译、训练和评估。模型结构部分,1D卷积层、池化层、Flatten层和全连接层的顺序要正确。激活函数方面,ReLU适用于卷积层,输出层用softmax做多分类。 用户可能还会关心如何解释模型的工作原理,比如卷积层如何提取特征,池化层的作用,以及如何防止过拟合,比如添加Dropout层。此外,可能需要提到数据增强或者优化器的选择,比如Adam优化器的效果。 还要注意引用相关的内容,比如在讲解反向传播时引用已有的资料,或者在提到测试准确率时引用提供的参考内容。例如,引用[^3]提到的小批量大小和优化器的选择对训练效果的影响。 最后,生成相关问题时要覆盖1D-CNN的结构、应用场景、调参方法、与传统分类模型的对比,以及处理不同长度序列的策略。确保问题能够引导用户深入理解1D-CNN的各个方面。</think>以下是一维卷积神经网络(1D-CNN)用于分类任务的教程及实现详解: ### 一、1D-CNN核心原理 1D-CNN通过滑动卷积核提取序列数据的局部特征,其卷积操作可表示为: $$ y[i] = \sum_{k=1}^{K} x[i+k-1] \cdot w[k] + b $$ 其中$x$为输入序列,$w$为卷积核权重,$b$为偏置项。相比全连接网络,1D-CNN通过权值共享显著减少参数数量[^1]。 ### 二、Keras实现步骤 #### 1. 数据预处理 ```python import numpy as np from tensorflow.keras import layers, models # 生成示例数据(时间序列分类) X_train = np.random.randn(1000, 128, 1) # 1000个样本,128时间步,1通道 y_train = np.random.randint(0, 5, 1000) # 5分类标签 ``` #### 2. 模型构建 ```python model = models.Sequential([ layers.Conv1D(64, 3, activation='relu', input_shape=(128, 1)), layers.MaxPooling1D(2), layers.Conv1D(128, 3, activation='relu'), layers.GlobalAveragePooling1D(), layers.Dense(64, activation='relu'), layers.Dropout(0.5), layers.Dense(5, activation='softmax') ]) ``` #### 3. 模型编译与训练 ```python model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) history = model.fit(X_train, y_train, epochs=20, batch_size=32, validation_split=0.2) ``` (使用Adam优化器和小批量训练可加速收敛) ### 三、关键组件解析 | 层类型 | 作用 | 参数示例 | |-----------------|-------------------------------|--------------------| | Conv1D | 特征提取 | filters=64, kernel_size=3 | | MaxPooling1D | 下采样 | pool_size=2 | | GlobalAveragePooling1D | 序列维度聚合 | - | ### 四、实际应用场景 1. 生理信号分类(ECG/EEG) 2. 传感器时序数据分析 3. 文本分类(字符级处理) 4. 工业设备故障检测
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值