资源简介
matlab+BP神经网络 手写体数字识别训练程序(含训练数据)。
包含5000张手写字数字图片(20x20像素),以及matlab训练程序。
代码片段和文件信息
%% 主函数
function [W delta iterNum] = BPNN(size_ alpha lambda threshold maxIter X y W)
%BP神经网络实现
%参数含义:
%size - 一维数组,表示神经网络架构(不包含偏置单元)
%alpha - 学习率α
%lambda - 正则化参数
%threshold - 误差阈值
%maxIter - 最大迭代次数
%Xy - 训练数据
%W - 可断参数,如果没有则随机初始化
%判断参数合法性
if size(X 2) ~= size_(1) || size(y 2) ~= size_(end) || size(y 1) ~= size(X 1)
fprintf(‘训练数据集与模型结构不符\n‘);
return;
end
%初始化一些参数
layerNum = length(size_);
maxUnitNum = max(size_);
m = size(X 1);
iterNum = 0;
%每个神经元的输出
a = zeros(layerNum maxUnitNum);
%每个神经元的误差
d = zeros(layerNum maxUnitNum);
%初始随机权重
if ~exist(‘W‘ ‘var‘) || isempty(W)
W = rand(layerNum - 1 maxUnitNum + 1 maxUnitNum + 1);
end
%迭代训练
while iterNum < maxIter
iterNum = iterNum + 1;
D = zeros(layerNum - 1 maxUnitNum + 1 maxUnitNum + 1);
delta = 0;
for i = 1 : m
%前向传播
[out a] = forwardPropagation(size_ W X(i :) a);
d(end 1 : length(out)) = out - y(i :);
delta = delta + sum(abs(out - y(i :)));
%反向传播
[d D] = backPropagation(size_ W d D a);
end
delta = delta / m;
fprintf(‘delta=%f\n‘ delta);
if delta <= threshold
fprintf(‘误差小于阈值,训练结束‘);
break;
end
%调整权重
W = adjustWeight(size_ W D alpha lambda m);
end
end
%% 一次前向传播
function [out a] = forwardPropagation(size_ W x a)
out = x;
a(1 1 : size_(1)) = x;
for i = 1 : length(size_) - 1
out = reshape(W(i 2 : size_(i + 1) + 1 1 : size_(i) + 1) size_(i + 1) size_(i) + 1) * [1 out]‘;
out = sigmoid(out‘);
a(i + 1 1 : size_(i + 1)) = out;
end
end
%% 一次反向传播
function [d D] = backPropagation(size_ W d D a)
for i = length(size_) - 1 : -1 : 1
%调节每个神经元的误差值
d(i 1 : size_(i)) = d(i + 1 1 : size_(i + 1)) * ...
reshape(W(i 2 : size_(i + 1) + 1 2 : size_(i) + 1) size_(i + 1) size_(i))...
.* (a(i 1 : size_(i)) .* (1 - a(i 1 : size_(i))));
% 累加调节每个权重的误差
D(i 2 : size_(i + 1) + 1 1 : size_(i) + 1) = D(i 2 : size_(i + 1) + 1 1 : size_(i) + 1) + ...
reshape(([1; a(i 1 : size_(i))‘] * d(i + 1 1 : size_(i + 1)))‘ 1 size_(i + 1) size_(i) + 1);
end
end
%% 调整权重
function W = adjustWeight(size_ W D alpha lambda m)
D = D / m;
for i2 = 1 : length(size_) - 1
%非常数项系数加上正则化参数
D(i2 2 : size_(i2 + 1) + 1 2 : size_(i2) + 1) = D(i2 2 : size_(i2 + 1) + 1 2 : size_(i2) + 1) + ...
lambda * W(i2 2 : size_(i2 + 1) + 1 2 : size_(i2) + 1) / m;
%梯度下降调整权重
W(i2 1 : size_(i2 + 1) + 1 1 : size_(i2) + 1) = W(i2 1 : size_(i2 + 1) + 1 1 : size_(i2) + 1) -...
alpha * D(i2 1 : size_(i2 + 1) + 1 1 : size_(i2) + 1);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-01-05 12:47 手写体数字识别训练程序\
文件 3223 2018-12-31 15:04 手写体数字识别训练程序\BPNN.m
文件 692 2018-12-30 20:27 手写体数字识别训练程序\BPNNPredict.m
文件 1502 2017-03-14 09:40 手写体数字识别训练程序\displayData.m
文件 7511764 2017-03-14 09:40 手写体数字识别训练程序\ex3data1.mat
文件 2068 2019-01-05 12:45 手写体数字识别训练程序\HandwriteRecognizationTest.m
文件 107 2018-12-21 13:27 手写体数字识别训练程序\sigmoid.m
文件 2436858 2018-12-31 20:34 手写体数字识别训练程序\weight.mat
目录 0 2018-12-28 16:41 手写体数字识别训练程序\手写体数字识别训练数据\
文件 7511764 2017-03-14 09:40 手写体数字识别训练程序\手写体数字识别训练数据\data.mat
目录 0 2018-12-28 16:39 手写体数字识别训练程序\手写体数字识别训练数据\pics\
目录 0 2018-12-28 16:35 手写体数字识别训练程序\手写体数字识别训练数据\pics\0\
文件 355 2018-12-28 16:35 手写体数字识别训练程序\手写体数字识别训练数据\pics\0\1.jpg
文件 327 2018-12-28 16:35 手写体数字识别训练程序\手写体数字识别训练数据\pics\0\10.jpg
文件 342 2018-12-28 16:35 手写体数字识别训练程序\手写体数字识别训练数据\pics\0\100.jpg
文件 368 2018-12-28 16:35 手写体数字识别训练程序\手写体数字识别训练数据\pics\0\101.jpg
文件 364 2018-12-28 16:35 手写体数字识别训练程序\手写体数字识别训练数据\pics\0\102.jpg
文件 379 2018-12-28 16:35 手写体数字识别训练程序\手写体数字识别训练数据\pics\0\103.jpg
文件 339 2018-12-28 16:35 手写体数字识别训练程序\手写体数字识别训练数据\pics\0\104.jpg
文件 361 2018-12-28 16:35 手写体数字识别训练程序\手写体数字识别训练数据\pics\0\105.jpg
文件 329 2018-12-28 16:35 手写体数字识别训练程序\手写体数字识别训练数据\pics\0\106.jpg
文件 377 2018-12-28 16:35 手写体数字识别训练程序\手写体数字识别训练数据\pics\0\107.jpg
文件 379 2018-12-28 16:35 手写体数字识别训练程序\手写体数字识别训练数据\pics\0\108.jpg
文件 377 2018-12-28 16:35 手写体数字识别训练程序\手写体数字识别训练数据\pics\0\109.jpg
文件 341 2018-12-28 16:35 手写体数字识别训练程序\手写体数字识别训练数据\pics\0\11.jpg
文件 384 2018-12-28 16:35 手写体数字识别训练程序\手写体数字识别训练数据\pics\0\110.jpg
文件 374 2018-12-28 16:35 手写体数字识别训练程序\手写体数字识别训练数据\pics\0\111.jpg
文件 344 2018-12-28 16:35 手写体数字识别训练程序\手写体数字识别训练数据\pics\0\112.jpg
文件 348 2018-12-28 16:35 手写体数字识别训练程序\手写体数字识别训练数据\pics\0\113.jpg
文件 357 2018-12-28 16:35 手写体数字识别训练程序\手写体数字识别训练数据\pics\0\114.jpg
文件 310 2018-12-28 16:35 手写体数字识别训练程序\手写体数字识别训练数据\pics\0\115.jpg
............此处省略4991个文件信息
相关资源
- 《神经模糊预测控制及其MATLAB实现》
-
《基于MATLAB+7.X+SIMUli
nk_STATEFLOW系统仿 -
MATLAB-SIMUli
nk通信系统建模与仿真分 - 系统辨识资料大全(matlab系统辨识工
- MATLAB基于模型设计入门到精通TMS320F
- 《Matlab数据分析与挖掘实战》-代码
- Matlab Robotics Toolbox 9.10软件以及说明书
- 《卡尔曼滤波原理及应用-MATLAB仿真》
- MATLAB喷泉码仿真平台
- 粒子滤波原理及其应用——Matlab仿真
- MNIST手写字 Matlab程序,包含BP和CNN程序
- MATLAB控制系统设计与仿真
- 本征正交分解PODMatlab代码
- Numerical Methods Using Matlab.pdf
- 《MATLAB教程》张志涌五本书随书光盘
- 机器人控制系统的设计与MATLAB仿真程
- 数字图像处理的MATLAB实现(第2版)
- 数字调制解调技术的MATLAB与FPGA实现
- Matlab深度学习工具箱 deep learning tool
- 数字滤波器的MATLAB与FPGA实现光盘文件
- MATLAB图像处理详解杨丹编著,高清P
- MATLAB神经网络原理与PDF和视频.7z
-
详解MATLAB/SIMUli
nk通信系统建模与仿 - 基于模型的设计及其嵌入式实现-刘杰
- 惯性导航matlab开源程序GPS&IMU;数据融合
- MATLAB R2015b最优化计算
- MATLAB智能算法30个案例分析PDF+源代码
- Matlab图像处理:能力提高与应用案例
- 详解matlab图像函数及其应用
- MATLAB的S-Function编写指导以及一些
评论
共有 条评论