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

在编程实现神经网络的时候,在将学习率α设置的比较大或者将w用numpy.random.randn()初始化的时候,会遇到RuntimeWarning: divide by zero encountered in log警告。是因为sigmoid函数进行exp(-z)运算时,因为输入得z值太大(正值)或太小(负值),产生了内存溢出,最终得到的结果是nan。所以在cost函数中的log计算引发此警告。

cost = -1 / m * np.sum(Y * np.log(A) + (1 - Y) * np.log(1 - A))

在这里插入图片描述

  • 学习率设置成0.001时的z值(wx+b)
    神经网络中的RuntimeWarning: divide by zero encountered in log问题_第1张图片
  • 学习率设置成0.2时的z值(wx+b)
    神经网络中的RuntimeWarning: divide by zero encountered in log问题_第2张图片
  • 学习率设置成0.001时的w,b值
    神经网络中的RuntimeWarning: divide by zero encountered in log问题_第3张图片
  • 学习率设置成0.2时的w,b值

神经网络中的RuntimeWarning: divide by zero encountered in log问题_第4张图片
总而言之,这个问题应该是w的值不合适造成的(太大或太小)。
因为源数据是64x64像素的图片,有64x64x3个features,w的变化对z值得影响很明显。

你可能感兴趣的:(coding)