• matlab 设计BP神经网络对给出的英文字符分类


    题目如下:

    在这里插入图片描述
    这里题目的意思应该是输入16个像素格如下图:
    在这里插入图片描述

    输出向量表示那个地方没读太懂,希望有大佬懂得私信或者评论一下,这里对A I O分类的输出向量代表我换成了1 2 3,代码部分参考了这篇文章:
    https://blog.csdn.net/weixin_42296976/article/details/81146551
    代码如下:

    
    
    %读取训练数据
    [f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,class] = textread('data.txt','%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f',150);
    
    
    %特征值归一化,数据归一化及将数据映射到[0,1][-1,1]区间或更小的区间
    [input,minI,maxI] = premnmx( [f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16]')  ;
    
    %构造输出矩阵
    s = length(class) ;
    output = zeros( s , 3  ) ;
    for i = 1 : s 
       output( i , class( i )  ) = 1 ;
    end
    
    %创建神经网络
    net = newff( minmax(input) , [10 3] , { 'logsig' 'purelin' } , 'traingdx' ) ; 
    
    %设置训练参数
    net.trainparam.show = 50 ;
    net.trainparam.epochs = 90 ;
    net.trainparam.goal = 0.01 ;
    net.trainParam.lr = 0.01 ;
    
    %开始训练
    net = train( net, input , output' ) ;
    
    %读取测试数据
    [t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,c] = textread('datatest.txt' , '%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f',150);
    
    %测试数据归一化
    testInput = tramnmx ( [t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16]' , minI, maxI ) ;
    
    %仿真
    Y = sim( net , testInput ) 
    
    %统计识别正确率
    [s1 , s2] = size( Y ) ;
    hitNum = 0 ;
    for i = 1 : s2
        [m , Index] = max( Y( : ,  i ) ) ;
        if( Index  == c(i)   ) 
            hitNum = hitNum + 1 ; 
        end
    end
    sprintf('识别率是 %3.3f%%',100 * hitNum / s2 )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    数据集没找到,就大概自己做了个小数据集三类字母每类50个数据分成训练集、测试集。
    网盘地址:
    链接:https://pan.baidu.com/s/1kuaItryEwsGeCGUSqSwZNQ
    提取码:nqtj

    涉及知识点:

    1.BP(Back-propagation)神经网络:训练中可以通过反馈(反向传播)自行减小与目标的误差,直至达到训练前所要求误差目标的一种神经网络。其过程就是根据当前网络的学习率作为修正幅度,对每个神经元的残差在输入变量的梯度方向上求解误差值并进行修正。

    2.预处理(归一化处理):将数据映射到[0,1]或[-1,1]或更小的区间中。归一化可以防止有的数据过大减缓神经网络的收敛,导致训练时间超出预期。同时数据范围的大小同样会影响数据的作用。
    主要有两种线性转换算法:
    (1)y = (x - min)/(max - min) ,min为x的最小值,max为x的最大值,将数据归一到 [0,1] 区间,此时激活函数应为S型函数(sigmoid
    (2)y = 2(x - min)/(max - min) - 1,将数据归一到 [-1,1] 区间,此时激活函数应为双极S形函数

    3.使用Matlab实现神经网络:建立前馈神经网络使用到以下3个函数
    newff:
    前馈网络创建函数(语法:net = newff(nx2的矩阵每行包括最大值最小值,k维向量表示网络中各层的节点数,{k维字符串向量,每一分量为对应层的激活函数},训练算法)
    常见的激活函数线性函数(Linear(字符串表示:purelin))、对数S形转移函数(Logarithmic(字符串表示:logsig))、双曲正切S形函数(Hyperbolic(字符串表示:tansig))
    常见训练函数:traingd:梯度下降BP训练函数、traingdx:梯度下降自适应学习率训练函数
    网络配置参数:训练目标误差:net.trainparam.goal、中间结果的周期:net.trainparam.show、最大迭代次数:net.trainparam.epochs、学习率:net.trainparam.lr。

    train:训练一个神经网络
    语法:[net, tr, Y1, E] = train(net,X,Y)
    X:网络实际输入
    Y:网络应有输出
    tr:训练跟踪信息
    Y1:网络实际输出
    E:误差矩阵
    sim:使用网络进行仿真
    语法:Y = sim(net,X)
    net:网络
    X:输入网络的KxN矩阵 K为网络个数 N为数据样本
    Y:输出矩阵QxN Q为网络输出个数

    对应训练过程如下:
    在这里插入图片描述
    误差图示如下图:
    在这里插入图片描述

    回归曲线如图:

    在这里插入图片描述

  • 相关阅读:
    【python基础】函数详解:编写函数、传递参数、使用位置实参、函数存储到模块中、函数编写指南
    最好的天线基础知识!超实用 随时查询
    不可重复读与幻读的区别
    如何防止公司代码泄露(如何防止员工拷贝代码)
    MacOS 上安装和管理 Node.js
    汽车电子 - AUTOSAR
    服务器配置宝塔(Linux 服务器运维管理软件)
    行内元素有哪些,块级元素呢? 空元素有哪些呢?
    长方柱类(类和对象)Java
    Vue_Bug npm install报错 code:128
  • 原文地址:https://blog.csdn.net/weixin_43275631/article/details/126896117