python - 神经网络 - 损失不收敛

标签 python neural-network gradient-descent convergence

该网络包含一个输入层和一个输出层,没有非线性。输出只是输入的线性组合。我正在使用回归损失来训练网络。我根据简单的线性函数生成了一些随机一维测试数据,并添加了高斯噪声。问题是损失函数没有收敛到零。

import numpy as np
import matplotlib.pyplot as plt

n = 100
alp = 1e-4
a0 = np.random.randn(100,1) # Also x
y = 7*a0+3+np.random.normal(0,1,(100,1))

w = np.random.randn(100,100)*0.01
b = np.random.randn(100,1)

def compute_loss(a1,y,w,b):
       return np.sum(np.power(y-w*a1-b,2))/2/n

def gradient_step(w,b,a1,y):

    w -= (alp/n)*np.dot((a1-y),a1.transpose())
    b -= (alp/n)*(a1-y)  
    return w,b

loss_vec = []
num_iterations = 10000

for i in range(num_iterations):

    a1 = np.dot(w,a0)+b
    loss_vec.append(compute_loss(a1,y,w,b))
    w,b = gradient_step(w,b,a1,y)
plt.plot(loss_vec)

最佳答案

收敛还取决于您使用的 alpha 值。我稍微玩了一下你的代码

alp = 5e-3

我在对数 x 轴上绘制了以下收敛性

plt.semilogx(loss_vec)

输出

enter image description here

关于python - 神经网络 - 损失不收敛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52355145/

相关文章:

python - 如果任何属性不存在,如何访问嵌套属性或返回默认值?

python - 了解python中的执行流程

neural-network - 识别物体的姿势(IBM Watson)

machine-learning - 线性回归中学习算法的输出是什么?

python - 如何从嵌套标签的页面中提取文本

python - 从 vba 调用 python 函数

r - 逻辑回归梯度下降算法从 R 内置的 GLM 函数返回不同的系数

machine-learning - 使用梯度下降理解 Logistic 回归的代码

python - 如何加载 caffe 模型并转换为 numpy 数组?

machine-learning - 在 Caffe 中创建新层