python实现Adam算法
时间: 2023-09-09 21:14:12 浏览: 153
Adam算法是一种常用的基于梯度下降的优化算法,它结合了动量梯度下降算法和RMSProp算法的优点。以下是Python实现Adam算法的示例代码:
```python
import numpy as np
class Adam():
def __init__(self, lr=0.001, beta1=0.9, beta2=0.999, epsilon=1e-8):
self.lr = lr
self.beta1 = beta1
self.beta2 = beta2
self.epsilon = epsilon
self.m = None
self.v = None
self.t = 0
def update(self, w, grad_wrt_w):
self.t += 1
if self.m is None:
self.m = np.zeros_like(w)
self.v = np.zeros_like(w)
self.m = self.beta1 * self.m + (1 - self.beta1) * grad_wrt_w
self.v = self.beta2 * self.v + (1 - self.beta2) * np.square(grad_wrt_w)
m_hat = self.m / (1 - self.beta1 ** self.t)
v_hat = self.v / (1 - self.beta2 ** self.t)
w -= self.lr * m_hat / (np.sqrt(v_hat) + self.epsilon)
return w
```
其中,lr表示学习率,beta1和beta2是动量系数,epsilon是防止除以0的小常数。在update函数中,首先初始化m和v,然后计算当前的动量和RMSProp,然后计算修正后的动量和RMSProp,最后更新参数w。
阅读全文