前言前面我们通过notebook,完成了在PYNQ-Z2开发板上编写并运行python程序。我们的最终目的是基于神经网络,完成手写的数字识别。在这之前,有必要讲一下神经网络的基本概念和工作原理。
何为神经网络首先来看一下维基百科对神经网络的定义: 人工神经网络(英语:Artificial Neural Network,ANN),简称神经网络(Neural Network,NN)或类神经网络,在机器学习和认知科学领域,是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)的结构和功能的数学模型或计算模型,用于对函数进行估计或近似。神经网络由大量的人工神经元联结进行计算。大多数情况下人工神经网络能在外界信息的基础上改变内部结构,是一种自适应系统,通俗的讲就是具备学习功能。现代神经网络是一种非线性统计性数据建模工具。
简单来说,就是给定输入,神经网络经过一系列计算之后,输出最终结果。这好比人的大脑思考问题的过程。人脑输入一个问题,进行思考,然后给出答案。神经网络就是在模拟人的思考这一过程。而我们要做的就是以数学的方式,将这一抽象的过程进行量化。
神经元与激活函数人的大脑有大约1000亿个神经元。神经元在受到一定刺激后,会将信号传给下一个神经元。但神经元不会立即反应,而是会抑制输入,直到输入超过某一阈值,才会触发输出。这有点类似数学中的阶越函数。如下图:
图1
当输入很小时,输出为0,一旦输入超过阈值,输出就一跃而起。但我们一般用S函数
作为激活函数。如下图:
图2
该函数相比阶越函数更加接近现实。
神经网络原理如图所示是一个具有两层的神经网络,每层有两个神经元。
图3
这里两个输入分别为1.0和0.5。W1,1 W1,2 W2,1 W2,2表示权重。 于是第二层第一个神经元的输入 |