神经网络中的RuntimeWarning: divide by zero encountered in log问题

在使用Python对神经网络进行编程实现的时候,往往由于设置的学习率α偏大,或者由于在对W进行np.random.randn()的时候,会遭遇系统报RuntimeWarning: divide by zero encountered in log错误。

下面的定义的激活函数以及神经网络进行正向传播和反向传播的函数,其中出错的原因也是在在两个函数之中。

def sigmoid(Z):
    return 1/(1+np.exp(-Z))

def forward_backward_propagation(X,Y,W,b,):
    m=X.shape[1]
    A=sigmoid(np.dot(W.T,X)+b)
    cost=(-1/m)*np.sum(Y*np.log(A)+(1-Y)*np.log(1-A))

    #反向传播
    dW=(1/m)*np.dot(X,(A-Y).T)
    db=(1/m)*np.sum(A-Y)
    grads={
        "dW":dW,
        "db":db,
        "cost":cost
    }
    return grads

出错截图
错误原因:
因为sigmoid函数在进行np.exp(-z)运算时,由于输入得z值太大(正值)或太小(负值),计算出来结果是nan,产生了内存溢出,因此就在cost的计算中的log计算引发此警告。
解决方法:根据自己的需要适当调整学习率α的大小。

当然由于W的原因也可能会出现类似的错误,主要原因现在的图片的像素大小不一,因此图片的特征也不一样,所以会导致出现此类错误。W值的变化对计算结果的影响非常大。

你可能感兴趣的:(深度学习,深度学习,神经网络)