- 不要抄作业!
- 我只是把思路整理了,供个人学习。
- 不要抄作业!
本周作业实践了课上的各种优化算法:
- mini-batch
- momentum
- Adam
首先是标准的gradient descent:
1 | def update_parameters_with_gd(parameters, grads, learning_rate): |
mini-batch
步骤是:
- shuffle:将数据随机打乱,使用
np.random.permutation(m)
函数可以把m个样本的顺序重新映射,变成一个len为m的列表,里面的值就是映射原本的顺序。 - 再根据size大小进行分区,需要注意的是最后的数据有可能小于size大小的,因为可能无法整除,要单独考虑
1 | # GRADED FUNCTION: random_mini_batches |
Momentum
先初始化为0,
1 | # GRADED FUNCTION: initialize_velocity |
再按公式进行迭代,因为指数加权平均不需要知道前面n个数据,只要一步一步进行迭代,知道当前的数据就行,节省空间。
1 | # GRADED FUNCTION: update_parameters_with_momentum |
Adam
没什么好说的,先初始化,根据公式来就行了。
1 | def initialize_adam(parameters) : |
1 | def update_parameters_with_adam(parameters, grads, v, s, t, learning_rate = 0.01, |
最后代入模型函数,根据关键字选择需要的优化算法就行了。
1 | def model(X, Y, layers_dims, optimizer, learning_rate = 0.0007, mini_batch_size = 64, beta = 0.9, |
效果
gradient descent
gradient descent with momentum
Adam mode
效果还是很明显的: