Matlab深度学习实践之手写体识别(含详细注释)
Matlab这几年在人工智能这块儿也越做越好了,最近为了熟悉matlab如何搭建神经网络,自己做了一个手写体识别实验,记录一下。
实验任务非常简单,网络搭的也非常随意,不合理的地方也懒得改,旨在走通matlab搭建神经网络的流程。
首先,数据集为MNIST数据集
我已经把数据按类别分好,分为train和test,底下又都有十个子文件夹存放手写体图像。
网络训练代码如下:
clear;close all;clc;
%% 数据读取、增强%读取训练集
path_train = 'D:\work\过期文件\手写体识别\MNIST\train'; %训练集路径
folders_train = fullfile(path_train,{'0' '1' '2' '3' '4' '5' '6' '7' '8' '9'}); %读取子目录
imds_train = imageDatastore(folders_train,'FileExtensions','.jpg',...'LabelSource','foldernames'); %读取所有图像路径
[imdsTrain,imdsValidation] = splitEachLabel(imds_train,0.9,0.1); %拆分出验证集%读取测试集
path_test = 'D:\work\过期文件\手写体识别\MNIST\test';
folders_test = fullfile(path_test,{'0' '1' '2' '3' '4' '5' '6' '7' '8' '9'});
imds_test = imageDatastore(folders_test,'FileExtensions','.jpg',...'LabelSource','foldernames');%图像增强
pixelRange = [-2 2]; %平移范围
scaleRange = [0.9 1.1]; %缩放范围
imageAugmenter = imageDataAugmenter( ...'RandXTranslation',pixelRange, ...'RandYTranslation',pixelRange, ...'RandXScale',scaleRange, ...'RandYScale',scaleRange); %定义图像增强器
augimdsTrain = augmentedImageDatastore([28,28],imds_train, ...'DataAugmentation',imageAugmenter); %图像增强
%% 设计(或者读取)网络
layers = [imageInputLayer([28 28 1],"Name","imageinput")convolution2dLayer([5 5],32,"Name","conv_1","Padding","same","Stride",[2 2])reluLayer("Name","relu_1")batchNormalizationLayer("Name","batchnorm_1")convolution2dLayer([3 3],32,"Name","conv_2","Padding","same")reluLayer("Name","relu_2")fullyConnectedLayer(512,"Name","fc_1")batchNormalizationLayer("Name","batchnorm_2")reluLayer("Name","relu_3")fullyConnectedLayer(10,"Name","fc_2")softmaxLayer("Name","softmax")classificationLayer("Name","classoutput")];
% analyzeNetwork(layers) %分析网络%% 训练网络
options = trainingOptions('sgdm', ...'MiniBatchSize',512, ...'MaxEpochs',1, ...'InitialLearnRate',1e-2, ...'Shuffle','every-epoch', ...'ValidationData',imdsValidation, ...'ValidationFrequency',3, ...'Verbose',1, ...'Plots','training-progress'); %设置训练策略
trainedNet = trainNetwork(augimdsTrain,layers,options); %训练%% 测试模型
[YPred,probs] = classify(trainedNet,imds_test);
accuracy = mean(YPred == imds_test.Labels)
这里面,用到了一些函数,一些重要的用法我都写在其他博客里了,这儿只大致说一下有什么用
- fullfile:读取文件夹下的所有子文件夹
- imageDatastore:读取数据集,这个函数比较重要,后边很多函数都在调用它
- splitEachLabel:拆分imageDatastore读取的数据
- imageDataAugmenter:图像增强器,定义如何增强图像
- augmentedImageDatastore:进行图像增强
- 关于如何搭建网络,我写在了这里,看完后发现一些简单任务用不着敲一行代码
- analyzeNetwork:分析网络
- trainingOptions:定义训练策略,比如学习率,优化器之类的
- trainNetwork:训练网络
- classify:将网络用于分类
训练结果:
如果需要处理好的数据集,可以留下邮箱~
听取评论区建议,直接放上网盘,应该不会被吞贴吧2333
链接:https://pan.baidu.com/s/1htpPayQ2m0B3C5xOk3Quqg
提取码:pdb6
最后在说明一下,网络是随便搭的,不要用!!只是学习MATLAB用的
以上这些希望会对你有所帮助
Matlab深度学习实践之手写体识别(含详细注释)相关推荐
- 【OFDM通信】基于matlab深度学习OFDM系统信号检测【含Matlab源码 2023期】
⛄一.深度学习OFDM系统信号检测简介 1 OFDM系统模型 OFDM系统是一种常用的多载波调制方式, 因为其具有能够在带宽较窄的情况下传输大量数据.能够对抗频率选择性衰落.传输速率高.实现简单.信道 ...
- Matlab深度学习-手写体数字识别
Matlab深度学习 文章目录 Matlab深度学习 前言 一.MNIST手写体数字数据 二.用到的深度学习框架-LeNet5 2-0 LeNet5的网络架构 2-1 框架实现-通过Matlab GU ...
- 基于Matlab深度学习Yolov4-tiny的交通标志识别道路标志识别检测
交通标志检测是辅助驾驶.自动驾驶系统中的重要组成部分,针对交通标志检测任务中复杂环境下的小目标检测精度低的问题,提出一种基于YOLOv4-tiny的交通标志检测方法. 基于Matlab深度学习的道路标 ...
- 基于MATLAB 2021b的机器学习、深度学习实践应用
近年来,随着无人驾驶汽车.医学影像智慧辅助诊疗.ImageNet竞赛等热点事件的发生,人工智能迎来了新一轮的发展浪潮.尤其是在计算机视觉和图像处理领域,各种颠覆性的成果应运而生. [专家]:郁磊副教授 ...
- MATLAB 2021b的机器学习、深度学习实践应用
近年来,随着无人驾驶汽车.医学影像智慧辅助诊疗.ImageNet竞赛等热点事件的发生,人工智能迎来了新一轮的发展浪潮.尤其是在计算机视觉和图像处理领域,各种颠覆性的成果应运而生. 更多资讯关注:Ai科 ...
- 【第 07 章 基于主成分分析的人脸二维码识别MATLAB深度学习实战案例】
基于主成分分析的人脸二维码识别MATLAB深度学习实战案例 人脸库 全套文件资料目录下载链接–>传送门 本文全文源码下载[链接–>传送门] 如下分析: 主文件 function varar ...
- 深度学习实践2--分类检测识别专场
深度学习实践2–分类检测识别专场 时间:(5.12 - 5.22)线下展示 要求:按自己情况配合完成,每组至少实现一个,选题目一最好再选一个其他尝试一下,并且两个人都能简单了解过程,可自选题目(展示就 ...
- 基于深度学习的人脸性别识别系统(含UI界面,Python代码)
摘要:人脸性别识别是人脸识别领域的一个热门方向,本文详细介绍基于深度学习的人脸性别识别系统,在介绍算法原理的同时,给出Python的实现代码以及PyQt的UI界面.在界面中可以选择人脸图片.视频进行检 ...
- 【PyTorch深度学习实践】P9 kaggle otto商品分类作业(含注释)
<PyTorch深度学习实践>-刘二大人 Otto Group Product Classification作业 将商品进行十分类,输入为93个特征10个类别的商品数据集,输出为预测数据集 ...
- 基于深度学习的中文车牌识别与管理系统(含UI界面,Python代码)
摘要:本文详细介绍基于深度学习的中文车牌识别与管理系统,在介绍算法原理的同时,给出Python的实现代码以及PyQt的UI界面.在界面中既可以选择需要识别的车牌视频.图片文件.批量图片进行检测识别,也 ...
最新文章
- Pthread:POSIX Threads Programming
- 更改matlab默认启动路径
- setTimeout和setInterval的区别
- AFN\HTTPS\UIWebView
- python mpi开销_GitHub - hustpython/MPIK-Means
- MySQL字段类型详解
- ActiveMQ常见操作
- java基础70 负责静态的网页制作语言XML(网页知识)
- 洛谷P2473奖励关——状压DP
- OpenCV-车牌号检测
- 电脑突然调节不了亮度?让我教你来恢复
- STM32串口通信UARTx
- Hive面试题汇总(2021)
- b站黑马程序员的python怎么样_如何评价传智播客旗下的黑马程序员?
- 雷达的工作原理示意图_雷达测距原理.ppt
- DVI接口关于技术性的知识导论
- RTX3050显卡怎么样 rtx3050显卡什么水平 rtx3050相当于gtx什么显卡
- 微信小游戏开发实战教程3-绘制网格
- java电话面试_记一次java电话面试
- matlab滤波器滤除低频直流信号,对低频信号的滤波的方法