训练神经网络的时候,增大了隐藏层的神经元个数,突然间loss值变成了nan
经过多方搜索,找到了原因
tensorflow解决方法网上已有,这里贴keras的解决办法
在pycharm里
import keras
keras.losses
ctrl + 左键 losses 进入损失函数模块
找到调用的损失函数,这里是
def categorical_crossentropy(y_true, y_pred, from_logits=False, label_smoothing=0):
y_pred = K.constant(y_pred) if not K.is_tensor(y_pred) else y_pred
y_true = K.cast(y_true, y_pred.dtype)
if label_smoothing is not 0:
smoothing = K.cast_to_floatx(label_smoothing)
def _smooth_labels():
num_classes = K.cast(K.shape(y_true)[1], y_pred.dtype)
return y_true * (1.0 - smoothing) + (smoothing / num_classes)
y_true = K.switch(K.greater(smoothing, 0), _smooth_labels, lambda: y_true)
return K.categorical_crossentropy(y_true, y_pred, from_logits=from_logits)
把最后的一句改为
return K.categorical_crossentropy(y_true, y_pred+1e-5, from_logits=from_logits)
保存关闭,问题解决。