ANN之手写数字识别

本文详细介绍了使用人工神经网络(ANN)进行手写数字识别的过程,包括权重系数矩阵、偏置项、激活函数的原理及作用,并提供了相关代码实现。通过MNIST数据集演示了ANN在识别任务中的应用,最后对比了自定义实现与sklearn库的ANN性能。
摘要由CSDN通过智能技术生成

ANN之手写数字识别

MNIST数据集请查看上一篇博文:

https://blog.csdn.net/haohuang_ch/article/details/81297410

本文在数据存储形式上与上一篇博文区别为,将target从单一的数字转化为了一个10*1的矩阵,或者说是一个10维向量,对应的target的维度值为1,其它均为0。

简介

ANN是人工神经网络的简称。如果你对比ANN简单的线性回归、逻辑回归和梯度下降法没有认识,推荐先学习一下再学习ANN。
ANN与回归的不同之处在于,它有网络结构,大概如下:
这里写图片描述
而对于回归,我们可以简单地理解为,只有输入层到输出层。而ANN有一个或多个隐藏层,隐藏层的每个节点称作神经元,每层之间依赖于一个权重系数矩阵。设计神经网络的主要工作在于设计隐藏层的结构和权重系数矩阵。
对于每层之间的传播过程,可以总结为如下:
这里写图片描述

in=WiX+b i n = W i X + b
out=activation(in) o u t = a c t i v a t i o n ( i n )
Wi W i 表示系数矩阵的第 i i 行,由 in i n 在该层的位置决定。
1 1 是偏置项。
a c t i v a t i o n ( ) 是激活函数。
该层的每一个节点的 out o u t 构成该层的输出 X X

权重系数矩阵

#neurons是神经网络的结构表示,是一个数组,元素为每层的节点数,例如[784,40,10]。
#输出parameter是一个字典,键为Wi,值为系数矩阵。
def initialize_parameters(neurons):
    inputneurons=neurons[0]
    hideneurons=neurons[1:len(neurons)-1]
    outputneurons=neurons[-1]
    hidelayers=len(hideneurons)
    parameter={}
    np.random.seed(2);
    #input->hide
    W0=np.random.uniform(low=-np.sqrt(6)/np.sqrt(inputneurons+1+hideneurons[0]), high=np.sqrt(6)/np.sqrt(inputneurons+1+hideneurons[0]),size=(hideneurons[0],inputneurons+1))
    parameter["W0"]=W0
    #hide->hide
    for l in range(0,hidelayers-1):
        Wl=np.random.uniform(low=-np.sqrt(6)/np.sqrt(hideneurons[l]+1+hideneurons[l+1]), high=np.sqrt(6)/np.sqrt(hideneurons[l]+1+hideneurons[l+1]),size=(hideneurons[l+1],hideneurons[l]+1))
        parameter["W"+str(l+1)]=Wl
    #hide->output
    Wo=np.random.uniform(low=-np.sqrt(6)/np.sqrt(hideneurons[hidelayers-1]+1+outputneurons), high=np.sqrt(6)/np.sqrt(hideneurons[hidelayers-1]+1+outputneurons),size=(outputneurons,hideneurons[hidelayers-1]+1))
    parameter["W"+str(hidelayers)]=Wo
    return parameter

偏置项

如果我们只看一维的 y = w x + b w w 是斜率, b 是截距。
如果 b=0 b = 0 ,则图像经过原点,但并不是所有的数据都是关于原点线性可分的,如下图。因此需要一个偏置项来移动分割面。

而这里的 b b 可以看做 b 1 b b 则可以作为系数矩阵的一列,作为可训练的系数。

激活函数

激活函数常用的有sigmod、tanh和relu。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值