Deep Learning学习 之 CNN代码解析(MATLAB)

本文介绍了如何在MATLAB中使用deepLearnToolbox-master实现CNN,详细解析了CNN的函数调用关系,包括Test_example_CNN、Cnnsetup、cnntrain、cnnff、cnnbp和cnnapplygrads等函数的作用。以MNIST手写数字数据集为例,阐述了数据预处理、网络结构设置、训练过程和误差计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MATLAB实现CNN一般会用到deepLearnToolbox-master。但是根据Git上面的说明,现在已经停止更新了,而且有很多功能也不太能够支持,具体的请大家自习看一看Git中的README。

deepLearnToolbox-master是一个深度学习matlab包,里面含有很多机器学习算法,如卷积神经网络CNN,深度信念网络DBN,自动编码AutoEncoder(堆栈SAE,卷积CAE)的作者是 Rasmus Berg Palm (rasmusbergpalm@gmail.com)
代码下载:https://github.com/rasmusbergpalm/DeepLearnToolbox

这里写图片描述

这里我们介绍deepLearnToolbox-master中的CNN部分。

函数

这里写图片描述

调用关系为:

这里写图片描述

该模型使用了mnist的数字mnist_uint8.mat作为训练样本,作为CNN的一个使用样例,每个样本特征为一个 28×28=

网络结构为:

这里写图片描述

Test_example_CNN

Test_example_CNN:

  • 1设置CNN的基本参数规格,如卷积、降采样层的数量,卷积核的大小、降采样的降幅
  • 2 cnnsetup函数 初始化卷积核、偏置等
  • 3 cnntrain函数 训练cnn,把训练数据分成batch,然后调用
    • 3.1cnnff 完成训练的前向过程
    • 3.2 cnnbp计算并传递神经网络的error,并计算梯度(权重的修改量)
    • 3.3 cnnapplygrads 把计算出来的梯度加到原始模型上去
  • 4 cnntest 函数,测试当前模型的准确率

该模型采用的数据为mnist_uint8.mat,含有70000个手写数字样本其中60000作为训练样本,10000作为测试样本。
把数据转成相应的格式,并归一化。

load mnist_uint8;
train_x = double(reshape(traub.x',28,28,60000))/255;
test_x = double(reshape(test_x',28,28,10000))/255;
train_y = double(train_y');
test_y = double(test_y');

设置网络结构及训练参数

%% ex1 Train a 6c-2s-12c-2s Convolutional neural network
%% will run 1 epoch in about 200 second and get around 11% error
%% with 100 epochs you' will get around 1.2% error

rand('state',0);
cnn.layers = {
    struct('type','i') %input layer
    struct('type','c','outputmaps',6,'kernelsize',5) % convolution layer
    struct('type','s','scale',2) %sub sampling layer
    struct('type','c','outputmaps',12,'kernelsize',5) % convolutional layer
    struct('type','s','scale',2) % sub sampling layer
%% 训练选项,alpha学习效率(不用),batchsiaze批训练总样本的数量,numepoches迭代次数
opts.alpha = 1;
opts.batchsize = 50;
opts.numepochs = 1;

初始化网络,对数据进行批训练,验证模型准确率。

cnn = cmmsetup(cnn, train_x, train_y);
cnn = cnntrain(cnn, train_x, train_y, opts);
[er, bad] = cnntest(cnn, test_x, test_y);

绘制均方误差曲线

%plot mean squared error
figure; plot(cnn.rL);

Cnnsetup.m

该函数你用于初始化CNN的参数。
设置各层的mapsize大小,
初始化卷积层的卷积核、bias
尾部单层感知机的参数设置

bias统一初始化为0

权重设置为:random(-1,1)/ 6

Deep Learning Toolbox™提供了一个框架,用于设计和实现具有算法,预训练模型和应用程序的深度神经网络。您可以使用卷积神经网络(ConvNets,CNN)和长期短期记忆(LSTM)网络对图像,时间序列和文本数据进行分类和回归。应用程序和图表可帮助您可视化激活,编辑网络体系结构以及监控培训进度。 对于小型训练集,您可以使用预训练的深层网络模型(包括SqueezeNet,Inception-v3,ResNet-101,GoogLeNet和VGG-19)以及从TensorFlow™-Keras和Caffe导入的模型执行传输学习。 了解深度学习工具箱的基础知识 深度学习图像 从头开始训练卷积神经网络或使用预训练网络快速学习新任务 使用时间序列,序列和文本进行深度学习 为时间序列分类,回归和预测任务创建和训练网络 深度学习调整和可视化 绘制培训进度,评估准确性,进行预测,调整培训选项以及可视化网络学习的功能 并行和云中的深度学习 通过本地或云中的多个GPU扩展深度学习,并以交互方式或批量作业培训多个网络 深度学习应用 通过计算机视觉,图像处理,自动驾驶,信号和音频扩展深度学习工作流程 深度学习导入,导出和自定义 导入和导出网络,定义自定义深度学习图层以及自定义数据存储 深度学习代码生成 生成MATLAB代码或CUDA ®和C ++代码和部署深学习网络 函数逼近和聚类 使用浅层神经网络执行回归,分类和聚类 时间序列和控制系统 基于浅网络的模型非线性动态系统; 使用顺序数据进行预测。
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值