【问题标题】:My two layer neural network model doesn't converge我的两层神经网络模型不收敛
【发布时间】:2021-05-02 06:52:14
【问题描述】:

我正在训练一个两层神经网络。我等了 15000 个 epoch,模型仍然没有收敛。

ans = []
for i in range(1000):
    x1,y1 = random.uniform(-3,3),random.uniform(-3,3)
    if x1*x1 + y1 * y1 < 1:
        ans.append([x1,y1,0])
    elif x1*x1 + y1 * y1 >= 2 and x1*x1 + y1 * y1 <=8:
        ans.append([x1,y1,1])

data = pd.DataFrame(ans)
print(data.shape)
X = np.array(data[[0,1]])
y = np.array(data[2])

我正在生成随机点生成数据。数据看起来像这样。

weights_layer1 = np.random.normal(scale=1 / 10**.5, size=(2,20))
bias1 = np.zeros((1,20))
bias2 = np.zeros((1,1))
weights_layer2 = np.random.normal(scale=1 / 10**.5, size=(20,1))
for e in range(15000):
    for x,y1 in zip(X,y):
         x = x.reshape(1,2)
         layer1 = sigmoid(np.dot(x,weights_layer1)+bias1)
         layer2 = sigmoid(np.dot(layer1,weights_layer2)+bias2)
        
        dk = (y1-layer2)*layer2*(1-layer2)
        dw2 = learnrate * dk * layer1.T
        dw2 =dw2.reshape(weights_layer2.shape)
   # print(dw2.shape)
    
    
        weights_layer2 += dw2
   # bias2 += dk * learnrate
    
        dj = weights_layer2.T* layer1*(1-layer1)*dk
        dw1 = learnrate * np.dot(x.T,dj)
     

我正在以这种方式计算损失。

loss = 0
for x,y1 in zip(X,y):
    layer1 = sigmoid(np.dot(x,weights_layer1))
    layer2 = sigmoid(np.dot(layer1,weights_layer2))
    loss += (layer2 - y1)**2
    
    
print(loss)

找不到问题所在,你能看到什么吗?谢谢。我用 pytorch 进行了同样的训练,它收敛得很好。

最终模型在经过训练的数据上看起来像这样。但在测试数据上情况更糟。

【问题讨论】:

  • 除非您也共享数据和完整代码,否则任何人都无法提供帮助。
  • x 只是圆内外的一组点,它必须检测该点是在里面还是在外面
  • 我正在生成随机输入并检查随机点的准确性。
  • 请查看提问指南。如果您希望其他人工作只是为了重现您的问题,那么他们只会继续下一个问题。您需要帮助我们帮助您。 stackoverflow.com/help/how-to-ask。提问时,请发布完整的问题,包括您用于生成数据等的任何代码。
  • 添加了生成输入的代码。

标签: neural-network backpropagation


【解决方案1】:

经过几个小时的尝试,我发现了问题所在。该网络不会在没有偏差的情况下收敛。使用了它在 5000 个 epoch 中收敛的偏差。

【讨论】:

    猜你喜欢
    • 2019-04-13
    • 1970-01-01
    • 2012-03-03
    • 2016-05-13
    • 2019-02-20
    • 2016-05-13
    • 2018-12-15
    • 1970-01-01
    • 2016-07-10
    相关资源
    最近更新 更多