Я использую численно стабилизированную версию softmax как: -
def softmax(arr):
print(arr)
expArr=np.exp(arr-np.max(arr))
print(expArr)
return expArr/np.sum(expArr)
Он используется как: -
def feedforward(x_i,W):
...
outputLayer = softmax(np.dot(network[-1],W[-1]))
...
И эта функция вызывается итеративно: -
for j in range(len(x)):
....
network = feedforward(x[j],weights)
....
Тем не менее, для некоторой последовательности массивов я получаю предупреждение: -
RuntimeWarning: invalid value encountered in subtract
expArr=np.exp(arr-np.max(arr))
Входы (и выходы), идущие к функции непосредственно перед предупреждением: -
input
[-1.36678160e+211 -1.97916134e+206 -5.44472726e+204 -5.47948095e+276
-6.30134248e+251 -4.04707279e+210 7.72371508e+204 1.34861349e+268
5.47948093e+276 1.06699784e+206]
output
[0. 0. 0. 0. 0. 0. 0. 0. 1. 0.]
input
[-7.06701455e+257 1.47067222e+250 inf -inf
-1.13669521e+298 -6.54589076e+254 8.22221348e+250 inf
-inf -5.44761594e+251]
digit.py:22: RuntimeWarning: invalid value encountered in subtract
expArr=np.exp(arr-np.max(arr))
output
[ 0. 0. nan 0. 0. 0. 0. nan 0. 0.]
input
[nan nan nan nan nan nan nan nan nan nan]
output
[nan nan nan nan nan nan nan nan nan nan]
Я хочу знать, что хотя я стабилизировал функцию softmax, введя термин np.max(arr)
, почему я все еще получаю эту ошибку, и как я могу ее исправить?Спасибо!
Кроме того, я также использовал функцию softmax, приведенную в scipy.special
, но все равно получал то же предупреждение.