手写数字识别(一)

在学习识别手写输入数字时,初始化矩阵那里,有点不理解。源代码是这样的:

self.biases=[np.random.randn(y,1) for y in sizes[1:]]
        '''创建一个偏差向量'''
self.weights=[np.random.randn(y,x) for x,y in zip(sizes[:-1],sizes[1:])]
        '''创建一个权重偏差矩阵'''

先说明,这里sizes[1:]代表的是[3,1],sizes[:-1]代表的是[2,3]。

第一个创建生成的是两个数组。一个是3*1的,一个是1*1的。

第一个创建生成的是两个数组。一个是3*2的,一个是3*1的。为什么呢?

我们先看一下,randn函数是什么意思。

numpy.random.randn(d0, d1, ..., dn):生成一个浮点数或N维浮点数组,取数范围:正态分布的随机样本数。这里面的d0,d1....等于几,生成的就是d0*d1*d2*........的数组。示例代码如下:

>>> import numpy
>>> import random
>>> [numpy.random.randn(3,1)]
[array([[-0.10151443],
       [ 0.5825159 ],
       [-1.38996558]])]
>>> [numpy.random.randn(3,2)]
[array([[ 0.04849258,  0.57504998],
       [-0.52346663,  0.25426669],
       [-1.44160756,  0.31060458]])]

这里,我们生成了一个3*1数组和3*2数组。

这样再看代码就不难理解了。

self.biases=[np.random.randn(y,1) for y in sizes[1:]]#[3,1]

这里,执行了两次randn,一次是randn(3,1),然后是randn(1,1)。

再看,

self.weights=[np.random.randn(y,x) for x,y in zip(sizes[:-1],sizes[1:])]#[2,3],[3,1]

这里用了zip函数,这个函数,是将两个列表位置对应的元素组成一个元组,然后再将元组组合成一个列表输出。所以,最后输出[(2,3),(3,1)],然后用for循环取出x,y。两次赋给randn,randn(3,2)和randn(1,3)

希望有志同道合的小伙伴关注我的公众平台,欢迎您的批评指正,共同交流进步。



  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值