吴恩达代码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)= 无穷小了
来自刚入门的小白