231n--CNN 卷积神经网络

卷积神经网络解析
本文详细介绍了卷积神经网络(CNN)的基本概念和技术细节,包括卷积层、全连接层的工作原理,以及如何通过卷积核对输入图像进行特征提取。此外还探讨了卷积核的滑动规则、填充技巧、感受野的概念、池化层的作用等关键内容。

CNN Convolutional Neural Networks

20221031102346

Convolution Layer

Fully Connnected Layer
全连接层,将一张32323的图像展开成一个向量,然后进行向量的乘法

20221031102809

Convolution Layer

20221031102950

卷积核按照一定的规则在图像上进行滑动,卷积核的深度要和输入居真的深度相同。

20221031103305

计算时,使用卷积核和被卷积区域进行点乘,再加上一个 bias wTx+bw^T x +bwTx+b

使用一个卷积核得到一个深度为1的结果,并且activation map的大小变小了。
20221031103835

我们可以使用多个卷积核,将结果进行堆叠,拓展结果的深度
20221031104052

20221031104116

ConvNet 是一系列的卷积层,其中插入了激活函数
20221031104224

20221031104745

20221031105145

在卷积核进行滑动的时候,选择一个合适的步长 stride 进行滑动,会影响最终输出的结果的大小。
20221031105253

然而就算stride 为1的时候,得到的结果尺寸也会比输入更小,因此要进行填充。
20221031105453

如果不行近填充,尺寸缩进速度很快,工作效果并不好。

20221031105546

receptive field 感受野

卷积核是K大小的,那么结果中 K大小的区域涉及到输入中 KK ( row KK ,col K*K ) 大小的感受野

对于一个output区域,每经过一个卷积层,会将感受野的尺寸扩充K-1倍, 因此经过L层,感受野的尺寸扩充到 1+L*(K-1) 倍
20221031111148

对于更大的图像,如果我们想让output涉及到,看到整个图像,我们需要经过很多层的卷积

解决方案“降采样”

Solution: Strided Convolution

20221031111633

20221031112747

Pooling layer

20221031113241

20221031113354

max pooling 不需要学习参数,引入空间不变性

全连接层,就是一个普通的神经网络层
20221031113604

### 关于1D-CNN卷积神经网络在MATLAB中的实现 在一维卷积神经网络(1D-CNN)的应用场景中,其主要功能是对一维序列数据进行特征提取和模式识别。这类网络特别适合用于处理音频信号、时间序列数据或文本数据等具有顺序特性的输入[^1]。 #### MATLAB 中 1D-CNN 的基本架构设计 在 MATLAB 中,可以通过 `deepNetworkDesigner` 工具或者编程方式来定义并训练一个 1D-CNN 模型。以下是创建 1D-CNN 所需的关键组件及其作用: 1. **层的设计** 使用 `convolution1dLayer` 函数定义一维卷积层,指定滤波器的数量和大小。这一步骤对于捕捉局部时空特性至关重要。 2. **激活函数的选择** 常见的激活函数如 ReLU (`reluLayer`) 可以增强模型的非线性表达能力,使网络能够适应更复杂的映射关系。 3. **池化操作** 利用最大池化层 (`maxPooling1dLayer`) 或平均池化层减少特征图的空间尺寸,降低计算成本的同时保留重要的特征信息。 4. **全连接层与输出层** 将经过多次卷积和池化的特征送入全连接层 (`fullyConnectedLayer`) 进行最终决策,并通过 softmax 层或其他适当形式完成分类或回归任务。 下面提供一段完整的 MATLAB 实现代码示例,展示如何搭建一个简单的 1D-CNN 并应用于二分类问题: ```matlab % 数据准备 (假设 XTrain 是 N×C×T 数组, YTrain 是标签向量) layers = [ imageInputLayer([height width depth],'Name','input') % 输入层 convolution1dLayer(filterSize,numFilters,'Name','conv1') % 卷积层 reluLayer('Name','relu1') maxPooling1dLayer(poolSize,'Stride',poolStride,'Name','maxPool1') % 池化层 fullyConnectedLayer(numClasses,'Name','fc') % 全连接层 softmaxLayer('Name','softmax') classificationLayer('Name','classoutput')]; % 输出层 options = trainingOptions('adam',... 'MaxEpochs',numEpochs,... 'MiniBatchSize',miniBatchSize,... 'Plots','training-progress',... 'Verbose',false); net = trainNetwork(XTrain,YTrain,layers,options); ``` 此脚本展示了从零开始构建一个基础版 1D-CNN 流程,其中各参数应依据具体应用场景调整优化[^1]。 #### 提升性能的小技巧 为了进一步提高模型的表现力,在实际开发过程中还可以考虑引入正则化技术防止过拟合现象发生;采用迁移学习策略利用预训练权重加快收敛速度;或是探索更深更大的网络结构获取更强表征能力等问题解决思路[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值