• 大小: 19.47MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-06-14
  • 语言: Matlab
  • 标签: matlab  神经网络  

资源简介

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个文件信息

评论

共有 条评论