使用MATLAB的trainNetwork设计一个简单的LSTM神经网络
文章目录
- 前言
- 一、数据集
- 二、网络结构
- 三、测试程序
前言
借助MATLAB的deepNetworkDesigner搭一个简单的LSTM,数据集使用mnist手写数字识别数据集。
一、数据集
mnist数据集包括60000组训练数据和对应的标签,10000组测试数据和对应标签。每个数据都是一个28x28的矩阵,可以将其看做28x28像素的灰度图像(黑底白字)。而LSTM的输入应当是一个序列,我们可以把矩阵的每一行当做一帧,把图像分为28帧输入到LSTM。
数据集可以在我上传的资源里找到。
数据的格式是这样的:
XTrain,即训练图像,是一个60000x1的cell,cell的每一个元素是一个28x28的矩阵。矩阵的每一列为一帧。直接将矩阵以图片显示是这样的:
imshow(cell2mat(XTrain(8)))
这不是某希腊字母,而是手写数字3。我们希望按行输入,而MATLAB按列读取,因此我做了个转置。再转置一下就能看到正常的图像:
imshow(cell2mat(XTrain(8))')
标签的格式为:
可以直接通过categorical函数实现数值到categorical的转换,比如:
输入训练数据的方式不唯一,我用的只是其中一种,详情见MathWorks官网:trainNetwork
二、网络结构
使用一层128个隐藏节点的LSTM,一层全连接,输出使用softmax。网络的输入是一个序列,输出是标签,在MATLAB中,此网络可以这样描述:
layers = [ ...sequenceInputLayer(inputSize) %sequence输入lstmLayer(numHiddenUnits,'OutputMode','last') %lstmfullyConnectedLayer(numClasses) %全连接softmaxLayer %softmaxclassificationLayer]; %label输出
三、测试程序
完整的测试程序如下:
clear
clc
%加载数据
load('.\mnist_data_mat\XTrain.mat')
load('.\mnist_data_mat\YTrain.mat')
load('.\mnist_data_mat\XTest.mat')
load('.\mnist_data_mat\YTest.mat')%设置参数
inputSize = 28; %28个输入节点
numHiddenUnits = 128; %128个隐藏节点
numClasses = 10; %10种分类结果layers = [ ...sequenceInputLayer(inputSize) %sequence输入lstmLayer(numHiddenUnits,'OutputMode','last') %lstmfullyConnectedLayer(numClasses) %全连接softmaxLayer %softmaxclassificationLayer]; %label输出options = trainingOptions('adam', ...'ExecutionEnvironment','cpu', ...'MaxEpochs',5, ...'MiniBatchSize',60, ...'GradientThreshold',1, ...'Verbose',false, ...'Plots','training-progress');net=trainNetwork(XTrain,YTrain,layers, options); %训练Y_pred = classify(net, XTest); %测试
accy = sum(Y_pred == YTest) / length(YTest); %计算准确度
准确度为97.73%
options里的参数可以修改一下,我用同样结构的网络不同的参数做出了98.74%的准确度,仍有提升空间。这里为了节省训练时间牺牲了一些精度。
训练好的网络也上传到了资源里。
使用MATLAB的trainNetwork设计一个简单的LSTM神经网络相关推荐
- JAVA同时输入用户名和密码_用java模拟设计一个简单的“用户注册”程序。当用户输入用户名和密码时,单击“注...
用java模拟设计一个简单的"用户注册"程序.当用户输入用户名和密码时,单击"注 2020 - 9 - 26 TAG : 所有功能均已实现,如有不满意的地方我再修改imp ...
- python界面设计-手把手教你用Python设计一个简单的命令行界面
原标题:手把手教你用Python设计一个简单的命令行界面 对 Python 程序来说,完备的命令行界面可以提升团队的工作效率,减少调用时可能碰到的困扰.今天,我们就来教大家如何设计功能完整的 Pyth ...
- 设计一个简单分页存储管理系统_【系统架构】如何设计一个简单灵活的收银系统?看这里!(1)...
在电商项目中,收银系统是一个不可或缺的功能,因为你不仅要通过它来进行收款.退款,而且也要通过它进行财务的对账.报税等.因此,如何设计一个简单灵活的收银系统,对于开发电商项目来说非常重要. 那如何设计一 ...
- java完成一个学生信息调查程序_利用Java设计一个简单的学生信息管理程序
利用Java设计一个简单的控制台学生信息管理程序 此程序可作为课设的参考,其中信息存储于文件中. 创建了学生类Student,用于存储学号等的信息.创建StudentFunction类,用于实现诸如学 ...
- 大学慕课MOOC设计一个简单的计算工具
题目: 编程题: 设计一个简单的四则运算工具,有一个标题为"计算"的窗口,窗口布局为FlowLayout.设计四个按钮,分别命名为"加"."减&q ...
- 如何设计一个简单的KV数据库
下面的内容仅供设计一个简单的KV数据库.如果想要实现一个功能更强的KV数据库的话,还需要考虑:更加丰富的数据类型.数据压缩.过期机制.数据淘汰策略.集群化.高可用等功能,另外还可以增加统计模块.通知模 ...
- 如何设计一个简单的网页
设计一个简单的网页 1.按住文件新建文本(Ctrl+N),设计一个网页标题,点击创建 2.在<body>内部加入所需要的标签 如图中需要标题标签,水平线标签,段落标签 3.保存(Ctrl+ ...
- linux logo程序设计,教你在线设计一个简单美观的LOGO
当你配置好Linux服务器并上传网站程序到服务器上,直到架设网站成功,你可能需要一个美观的LOGO,如果你对LOGO的要求不高,可以在线自己设计一个,因为网站发展初期,你没有什么资金,请不了专业的美化 ...
- 设计一个简单的四则计算器
c# using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; u ...
- 用C++设计一个简单的学籍管理系统
资源下载地址:https://download.csdn.net/download/sheziqiong/85930262 资源下载地址:https://download.csdn.net/downl ...
最新文章
- HBuilder 的快捷键
- 04.设计模式-原型模式
- 细胞转染的操作步骤及注意事项
- 计蒜客 - Distance on the tree(LCA+主席树)
- js node 打包mac应用_node app 打包工具pkg的具体使用
- 处理2D图像和纹理——旋转,缩放和镜像一张图像
- Activiti(Flowable)流程克隆(运行时实例克隆)解决方案 一种订单制造中分裂与合并的核心技术实践...
- Power Integrations推出的全新CAPZero-3 X电容放电IC符合IEC60335标准
- 半导体界仙童“八叛逆”又一人去世,仅存一人!
- 系统集成项目管理工程师各种口诀技巧分享(1)
- 电脑XP系统最大支持多大内存?
- myeclipse破解补丁
- 樊登读书搞定读后感_樊登读书会《搞定》听后感
- 工作中常见的两种谬误
- 手机设备标识码(IMEI、MEID、UDID、UUID、ANDROID_ID、GAID、IDFA等)
- 计算机应用基础 制作表格说课稿,使用Word制作表格说课稿.doc
- GitHub 上 22 万star的第一抢票神器,3秒钟抢到!
- Android 隐私数据_Android安全警告:10亿台安卓设备不再支持安全更新
- Python Pandas读取文件
- 外贸推广方式有哪些,外贸推广怎么做