在求对数损失函数时会用到log函数,对数函数要求对数必须大于零,而从计算中得到的数据可能存在等于0或等于1的情况,这是就会出现inf的数据,影响后续的处理

例子:

x = np.array([0, 0, 0.2, 0.4, 0.7, 1, 1])
np.log(x)

结果如下:

array([ -inf, -inf, -1.60943791, -0.91629073, -0.35667494,  0.,  0. ])

为避免这样的情况出现,可以用到np.clip()

import numpy as np

x = np.array([-10, -1, 0, 0.2, 0.4, 0.7, 1, 10])
eps = 1e-15
x = np.clip(x, eps, 1 - eps)
print("x: ", x)
np.log(x)

结果为:

x:  [1.e-15 1.e-15 1.e-15 2.e-01 4.e-01 7.e-01 1.e+00 1.e+00]
array([-3.45387764e+01, -3.45387764e+01, -3.45387764e+01, -1.60943791e+00,
-9.16290732e-01, -3.56674944e-01, -9.99200722e-16, -9.99200722e-16])

np.clip()的三个参数:

第一个为数组,

使用第二个参数代替数组中小于该数的数据, 修改后这个就是也最小的数值

使用第三个参数代替数组中大于该数的数据, 修改后这个数就是最大的数值