python - 更新神经网络中的权重

标签 python machine-learning neural-network

我一直在尝试从头开始编写神经网络代码,并观看了几个视频以了解它是如何实现的。

所以我遇到了this guide在 Python 中构建一个简单的神经网络。

X = np.array([ [0,0,1],[0,1,1],[1,0,1],[1,1,1] ])
y = np.array([[0,1,1,0]]).T
syn0 = 2*np.random.random((3,4)) - 1
syn1 = 2*np.random.random((4,1)) - 1
for j in xrange(60000):
    l1 = 1/(1+np.exp(-(np.dot(X,syn0))))
    l2 = 1/(1+np.exp(-(np.dot(l1,syn1))))
    l2_delta = (y - l2)*(l2*(1-l2))
    l1_delta = l2_delta.dot(syn1.T) * (l1 * (1-l1))
    syn1 += l1.T.dot(l2_delta)
    syn0 += X.T.dot(l1_delta)

我发现最后两行令人困惑,它不应该是 syn1 -= l1.T.dot(l2_delta)syn0 -= X.T.dot(l1_delta)

我以为在梯度下降中你减去了斜率,但它似乎在这里被添加了。这是梯度上升吗?

谁能解释一下最后两行是如何工作的?

最佳答案

你是对的:你在梯度下降中减去斜率。

这正是这个程序所做的,减去斜率。 l1.T.dot(l2_delta)X.T.dot(l1_delta) 是负斜率,这就是为什么这段代码的作者使用+= 而不是 -=

关于python - 更新神经网络中的权重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57015464/

相关文章:

python - AutoMl Edge 模型仅显示图像

python - Keras 模型为多标签图像分类提供非常低的训练和验证精度

python - Keras 中带有权重的自定义损失函数

machine-learning - 证明多元线性回归模型效率的最佳 RMSE(均方根误差)值范围是多少?

python - Keras + Tensorflow 和 Python 中的多处理

python - Caffe 多标签矩阵输入

python - 如何在 matplotlib 散点图中设置/获取符号边缘的脊线?

python - sqlalchemy 外键/查询连接

python - Debian Python 2.5 包括来自 AlchemyAPI 的模块

python - 如何检查组级别的重复?