企业级AI技术内幕:深度学习框架开发+机器学习案例实战+Alluxio解密
上QQ阅读APP看书,第一时间看更新

2.4 如何初始化神经网络的权重

震撼人心的时刻到了,接下来讲解本节中实现多层次神经网络的最大难点:创建权重的值。

chapter2_Create_AI_Framework版本的NetworkConnection.py(v1)权重源代码如下:

第44~45行代码:设置区域最小值、区域最大值。

range_min=0

range_max=1

第47行代码:设置ε的值,ε根据特征数决定,这里只有2个特征x1x2,因此特征数为2,经过计算得到ε的值等于1.014 611 872 354 576 5。

第49行代码:使用random方法获取一个取值范围在[0,1]的随机数。

0≤random.random()<1

因为rand = range_min + (range_max – range_min) * random.random()

所以

0≤rand<1

-1≤2*rand-1<1

第50行代码:因为rand = rand * (2 * init_epsilon) – init_epsilon=(2 * rand – 1) init_epsilon

所以随机数rand的取值范围为

-init_epsilon≤rand<init_epsilon

-ε≤and<ε

第52行代码:通过weight.set_value(rand)代码将随机数rand赋值给权重值。权重值初始化的随机取值范围为[-ε,ε),即[-1.0146118723545765,1.0146118723545765)。

盘古人工智能框架使用rand设置随机数,听上去是随机,其实并不随机,因为这将影响训练多少次及每次训练的难度。我们设置最小值是-ε,最大值是ε,权重值取值范围为[-ε,ε),对其进行处理使其更符合实际的情况,尽量可能使其随机。这也是TensorFlow、PyTorch内部实现的核心。