Merge pull request #9 from nagadomi/fix_inf
Fix categorical_crossentropy/binary_crossentropy with NaN value
This commit is contained in:
commit
610cebd2f1
@ -2,6 +2,8 @@ import theano
|
|||||||
import theano.tensor as T
|
import theano.tensor as T
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
|
epsilon = 1.0e-15
|
||||||
|
|
||||||
def mean_squared_error(y_true, y_pred):
|
def mean_squared_error(y_true, y_pred):
|
||||||
return T.sqr(y_pred - y_true).mean()
|
return T.sqr(y_pred - y_true).mean()
|
||||||
|
|
||||||
@ -17,9 +19,11 @@ def hinge(y_true, y_pred):
|
|||||||
def categorical_crossentropy(y_true, y_pred):
|
def categorical_crossentropy(y_true, y_pred):
|
||||||
'''Expects a binary class matrix instead of a vector of scalar classes
|
'''Expects a binary class matrix instead of a vector of scalar classes
|
||||||
'''
|
'''
|
||||||
|
y_pred = T.clip(y_pred, epsilon, 1.0 - epsilon)
|
||||||
return T.nnet.categorical_crossentropy(y_pred, y_true).mean()
|
return T.nnet.categorical_crossentropy(y_pred, y_true).mean()
|
||||||
|
|
||||||
def binary_crossentropy(y_true, y_pred):
|
def binary_crossentropy(y_true, y_pred):
|
||||||
|
y_pred = T.clip(y_pred, epsilon, 1.0 - epsilon)
|
||||||
return T.nnet.binary_crossentropy(y_pred, y_true).mean()
|
return T.nnet.binary_crossentropy(y_pred, y_true).mean()
|
||||||
|
|
||||||
# aliases
|
# aliases
|
||||||
@ -38,4 +42,4 @@ def to_categorical(y):
|
|||||||
Y = np.zeros((len(y), nb_classes))
|
Y = np.zeros((len(y), nb_classes))
|
||||||
for i in range(len(y)):
|
for i in range(len(y)):
|
||||||
Y[i, y[i]] = 1.
|
Y[i, y[i]] = 1.
|
||||||
return Y
|
return Y
|
||||||
|
Loading…
Reference in New Issue
Block a user