本文已参与「新人创作礼」活动,一起开启掘金创作之路。
为了督促自己每天都有进步,在这里记录下每天遇到的问题和学到的新知识,作为个人回顾使用。
日记(第二周)
20201005
关于reshape()
z.reshape(-1)
将矩阵z所有元素排成一行
z.reshape(-1,1)
将矩阵z所有元素排成一列
z.reshape(-1,2)
将矩阵z所有元素排成两列
20201007
关于仿射层 Affine Layer
仿射层是神经网络中的全连接层,其中仿射的可以看做是不同层神经元之间的相互连接,在许多方面可以被看作是神经网络的「标准」层。
仿射层的一般形式如下
y = f( wx + b)
注:x 是层输入,w 是参数,b 是一个偏差矢量,f 是一个非线性激活函数 仿射层通常被用于卷积神经网络或循环神经网络输出的最终层。
20201008
关于np.linspace()
此函数是在指定间隔内返回均匀间隔的数字
例:
# 在闭区间[2, 3]生成5个间隔相同的数字
print(np.linspace(2.0, 3.0, num=5))
# [2. 2.25 2.5 2.75 3. ]
关于range()
>>>range(10) # 从 0 开始到 10
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(1, 11) # 从 1 开始到 11
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> range(0, 30, 5) # 步长为 5
[0, 5, 10, 15, 20, 25]
>>> range(0, 10, 3) # 步长为 3
[0, 3, 6, 9]
>>> range(0, -10, -1) # 负数
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
>>> range(0)
[]
>>> range(1, 0)
[]
关于np.prod()
对元素做乘积运算
20201009
关于np.newaxis()
插入新维度,就是增加一个维度
关于np.zeros_like()
生成一个矩阵,矩阵维度与括号内矩阵维度相同,且矩阵内值均为0
关于enumerate()
对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值。
list1 = ["这", "是", "一个", "测试"]
for index, item in enumerate(list1):
print index, item
>>>
0 这
1 是
2 一个
3 测试
还可以指定起始值:
list1 = ["这", "是", "一个", "测试"]
for index, item in enumerate(list1, 1):
print index, item
>>>
1 这
2 是
3 一个
4 测试
SGD+momentum
公式:
理解动量可以用滚小球的例子来理解,其中ε为learning rate.
RMSProp
在看RMSProp更新优化算法之前,我们先和AdaGrad(Adaptive Gradient)做一下对比
AdaGrad(Adaptive Gradient):
这个优化算法是为了解决改变学习率的问题,学习率如果是不变的话,每次更新的步长都一样,然而我们希望一开始学习率大一些,以便我们可以更快的收敛,而在后面学习率可以小一些,这样使结果更加准确。 上式中是梯度,也就是说把学习率除以之前所有梯度的平方和。 但是这样的方式可能会使学习率过早地降低,我们可以通过RMSProp来解决。 RMSProp:
是一个衰减率,一般们设置为0.9或0.99,是一个极小值,用来防止分母为0。
Adam
Adam是一种吧momentum和RMSProp结合到一起的算法。
批量归一化BN(Batch Normalization)
BN就是在每一层网络对数据做归一化处理,这样可以大大提高训练的速度。
BN的预处理近似于白化处理:
上式中,分子是每一批训练数据神经元的平均值,分母是每一批数据神经元激活度的标准差。 可是,这样的操作使得在这一层学习到的参数被破坏了,这样岂不是白学习了吗?因此我们还需要引入可学习参数.
每个神经元都有一对参数和,当:
时,就可以恢复所学习到的特征,这样,BN层前向传播过程公式就是: