RuntimeWarning: divide by zero encountered in log cost = (-1 / m) * np.sum(Y * np.log(A) + (1 - Y) *

本文探讨了在使用sigmoid函数时遇到的RuntimeWarning,焦点在于1-A接近0导致的log(1-A)无穷小问题。作者分享了通过设置阈值避免这个问题的方法,并解释了为何这样处理。对于初学者来说,这是一个关于如何处理常见编程陷阱的实用教程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

吴恩达代码RuntimeWarning记录

代码报错问题出在

cost = (-1 / m) * np.sum(Y * np.log(A) + (1 - Y) * np.log(1 - A))  # 计算成本

当某次训练A数组为

array([[0.99999999, 1.        , 1.        , 0.99999585, 0.9999998 ,
        0.99999969, 0.99999983, 1.        , 1.        , 1.        ,
        1.        , 1.        , 1.        , 1.        , 1.        ,
        1.        , 1.        , 1.        , 1.        , 0.99999983,
        1.        , 0.99999993, 1.        , 1.        , 1.        ,
        0.99997451, 1.        , 1.        , 0.99999999, 1.        ,
        0.99999513, 1.        , 1.        , 1.        , 0.99999999,
        1.        , 1.        , 1.        , 0.99753741, 1.        ,
        1.        , 0.99992144, 1.        , 1.        , 1.        ,
        0.99999992, 1.        , 1.        , 0.9999999 , 1.        ,
        1.        , 1.        , 1.        , 1.        , 1.        ,
        1.        , 1.        , 1.        , 0.99998849, 1.        ,
        1.        , 1.        , 1.        , 1.        , 1.        ,
        0.99999999, 1.        , 1.        , 1.        , 1.        ,
        1.        , 1.        , 0.99999539, 1.        , 1.        ,
        1.        , 0.99999999, 1.        , 0.99999999, 0.99989143,
        1.        , 1.        , 0.99999907, 0.99999997, 1.        ,
        1.        , 1.        , 0.99999999, 1.        , 0.99999952,
        1.        , 1.        , 1.        , 1.        , 1.        ,
        1.        , 1.        , 1.        , 1.        , 1.        ,
        1.        , 1.        , 1.        , 1.        , 1.        ,
        1.        , 1.        , 1.        , 1.        , 1.        ,
        1.        , 1.        , 0.99999959, 1.        , 1.        ,
        1.        , 1.        , 1.        , 0.99999999, 1.        ,
        1.        , 1.        , 1.        , 1.        , 1.        ,
        1.        , 1.        , 1.        , 1.        , 0.99999997,
        1.        , 1.        , 1.        , 1.        , 1.        ,
        1.        , 1.        , 1.        , 1.        , 1.        ,
        1.        , 1.        , 1.        , 0.99998463, 1.        ,
        1.        , 1.        , 1.        , 0.99999429, 1.        ,
        1.        , 0.99999979, 1.        , 1.        , 0.99999965,
        1.        , 1.        , 0.99999981, 1.        , 1.        ,
        0.99999999, 1.        , 1.        , 1.        , 1.        ,
        0.99999995, 1.        , 1.        , 1.        , 1.        ,
        1.        , 1.        , 1.        , 1.        , 1.        ,
        1.        , 1.        , 1.        , 1.        , 1.        ,
        1.        , 1.        , 1.        , 1.        , 1.        ,
        1.        , 1.        , 1.        , 1.        , 1.        ,
        1.        , 1.        , 1.        , 1.        , 1.        ,
        0.9732926 , 1.        , 1.        , 1.        , 1.        ,
        1.        , 1.        , 1.        , 1.        , 1.        ,
        0.99619086, 1.        , 0.99217882, 0.99999988]])

时,1 - A为

array([[1.34340350e-08, 4.34541292e-13, 6.66133815e-16, 4.15238537e-06,
        1.95507724e-07, 3.10935463e-07, 1.69475615e-07, 1.05806142e-09,
        1.95217176e-11, 6.82208734e-10, 4.44089210e-16, 1.06692433e-12,
        4.07182510e-10, 2.22044605e-16, 3.37507799e-14, 0.00000000e+00,
        3.10862447e-15, 0.00000000e+00, 3.04201109e-14, 1.66089254e-07,
        5.99298389e-13, 6.52830607e-08, 0.00000000e+00, 0.00000000e+00,
        1.77635684e-15, 2.54905640e-05, 2.79747336e-11, 5.70654635e-13,
        8.43950099e-09, 1.43663748e-10, 4.86994951e-06, 1.11022302e-15,
        2.15161222e-13, 9.99200722e-15, 1.18342262e-08, 1.26636235e-09,
        6.69626576e-11, 0.00000000e+00, 2.46258921e-03, 8.89421869e-12,
        7.97653055e-11, 7.85560671e-05, 8.99280650e-14, 9.32587341e-15,
        9.51416723e-12, 8.44031052e-08, 5.67546010e-13, 1.47117429e-10,
        9.66878138e-08, 1.75268688e-11, 0.00000000e+00, 1.09023901e-13,
        1.05249143e-13, 0.00000000e+00, 1.30157307e-09, 2.22044605e-16,
        1.56752389e-11, 0.00000000e+00, 1.15069962e-05, 3.53189966e-09,
        5.56098279e-10, 8.45390424e-12, 2.68673972e-14, 2.10534257e-10,
        0.00000000e+00, 1.09149553e-08, 2.22044605e-16, 1.19557697e-11,
        1.82076576e-14, 4.44089210e-15, 3.48610030e-14, 1.31690436e-10,
        4.60966839e-06, 1.46401780e-10, 3.69038133e-13, 4.44089210e-15,
        5.38044409e-09, 4.21078727e-10, 5.39132272e-09, 1.08570919e-04,
        8.84905482e-11, 1.33226763e-14, 9.28278253e-07, 2.64550795e-08,
        7.92699240e-14, 2.81841217e-12, 7.32747196e-15, 9.78308135e-09,
        9.30366895e-14, 4.84027141e-07, 1.11022302e-14, 1.20969901e-12,
        2.20467467e-09, 6.32782715e-12, 5.15143483e-14, 0.00000000e+00,
        2.22044605e-16, 2.90893976e-11, 0.00000000e+00, 2.17159624e-13,
        1.53210777e-14, 3.75348641e-11, 5.06261699e-14, 9.98001681e-12,
        2.17877272e-10, 2.22044605e-16, 0.00000000e+00, 6.81144030e-12,
        7.63922259e-12, 1.26565425e-14, 5.32907052e-15, 9.84989867e-13,
        4.11423536e-07, 2.10942375e-14, 2.22044605e-16, 1.00208730e-12,
        6.36379838e-13, 2.79827272e-11, 9.26868482e-09, 2.44249065e-14,
        9.54414325e-12, 0.00000000e+00, 1.63580260e-12, 4.32098801e-13,
        2.28039809e-13, 6.95244751e-10, 2.29882779e-12, 5.24647215e-10,
        2.22044605e-16, 3.45831900e-08, 5.18491916e-11, 6.68354261e-14,
        1.92746041e-10, 1.12531096e-09, 2.09965156e-10, 0.00000000e+00,
        0.00000000e+00, 0.00000000e+00, 9.50128864e-13, 1.41202672e-09,
        2.38697950e-13, 1.75415238e-14, 1.58095759e-13, 1.53696996e-05,
        0.00000000e+00, 3.63309383e-12, 2.22044605e-16, 1.06581410e-14,
        5.70650619e-06, 1.95399252e-14, 0.00000000e+00, 2.12081021e-07,
        5.36126699e-12, 2.22044605e-14, 3.45406170e-07, 1.09690035e-13,
        1.02939879e-12, 1.90046552e-07, 1.99840144e-15, 2.76034751e-11,
        1.44673309e-08, 6.17284002e-14, 4.21884749e-15, 8.50874926e-13,
        2.22044605e-16, 4.92466521e-08, 1.11022302e-15, 1.90070182e-13,
        6.01241279e-11, 1.33226763e-15, 1.59872116e-14, 8.83515483e-13,
        2.22044605e-16, 9.10382880e-15, 3.33066907e-15, 6.78418877e-10,
        1.44351198e-12, 3.89355215e-12, 1.87720506e-10, 9.62097069e-12,
        9.66364766e-10, 2.22044605e-16, 2.56972221e-12, 2.22044605e-15,
        2.99272829e-10, 7.67830244e-13, 4.67981542e-09, 3.10662607e-12,
        6.21724894e-15, 1.05444542e-11, 0.00000000e+00, 0.00000000e+00,
        5.25135491e-13, 0.00000000e+00, 2.29614394e-09, 2.67074010e-02,
        5.45119505e-13, 2.14672724e-12, 2.35744535e-10, 1.72940373e-09,
        1.17683641e-14, 3.33066907e-15, 6.14619466e-13, 1.25043309e-10,
        0.00000000e+00, 3.80913535e-03, 9.57012247e-14, 7.82118290e-03,
        1.24737594e-07]])

(0.00000000e+00表示 0.00000000乘以10的0次方)在pycharm中作为x输入logx

 就会输出-inf 无穷小。下图为logx(默认以e为底)图像可以看出为什么输出为无穷小(我甚至觉得应该报错,因为logx,x取值范围为(0,+∞),不能取0)

以上是我认为RuntimeWarning: divide by zero encountered in log的原因

我的修改方式

A = sigmoid(np.dot(w.T, X) + b)  # 计算激活值
A[A >= 0.9999999999999999] = 0.9999999999999999
cost = (-1 / m) * np.sum(Y * np.log(A) + (1 - Y) * np.log(1 - A))  # 计算成本

为什么这么改?我将1 - A = 0,np.log(1 - A)= 无穷小 =-36.7368005696771了

这样就不会出现np.log(1 - A)= 无穷小了

来自刚入门的小白

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值