您的位置:首页 > 理论基础 > 计算机网络

Python神经网络代码识别手写字具体流程(二):矩阵的前向传播

2017-11-05 15:57 585 查看
在上一篇神经网络代码实现流程中,加载数据返回了三组数据:训练集,测试集,验证集.加载数据后,需要对神经网络代码的类进行实例化。

以下讲解,神经网络代码类的实现:

在类中,首先,在Network类的构造函数中,由实例化时传入的参数定义了神经网络的层数,每层的神经元个数,并利用随机函数对每层的神经元权重以及偏置进行初始化。

def __init__(self, sizes):
self.num_layers = len(sizes)  #神经网络的层数,循环的时候会应用到
self.sizes = sizes   #传入的神经网络的列表
self.biases = [np.random.randn(y, 1) for y in sizes[1:]]  #生成的偏置的矩阵,形成到为一个列表,列表中的每一项都是一个矩阵。矩阵的维度与y相同
self.weights = [np.random.randn(y, x) for x, y in zip(sizes[:-1], sizes[1:])] #形成的权重的列表,(如果输入层为第0层的话,列表中的第i个矩阵的维度为:(第i层的神经元个数)*(i—1层神经元个数))。其中,随机化生成的矩阵符合标准正态分布。


在构造函数中,相当于形成了神经网络的骨架,在实例化神经网络的类时,传入的参数是神经网络的结构,所以所有的权重,偏置,神经元都已经被定义好了。在上一节中,数据已经被加载成了标准的格式,到现在,我们可以把训练集输入进去,得到了一个输出的矩阵,当然,这个输出的矩阵并没有什么用。但是理解这个矩阵却能够理解前向传导的含义。

前向传播网络代码如下:

def feedforward(self, a):
for b, w in zip(self.biases, self.weights):
a = sigmoid(np.dot(w, a)+b)
return a


在以上的代码中,a为输入,在上一节中我们知道输入为(784*50000),经过以上的循环:经过第一个隐藏层,输出的a为(30*50000),在经过第二个隐藏层,得到的a为(10*50000)。当然,我们肯定不会这样使用神经网络将所有的数据一次向传入进去,只是用此说明一下前向网络的流程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 神经网络