Keras 密集层输出为"nan"



我正在使用Keras构建一个具有CTC丢失的RNN模型。

我发现,当将张量传递到具有activation=None的稠密层时,该层的输出都是nan

但当设置为activation='softmax'时,输出为normal而不是nan

问题代码(logits的元素都是nan(:

logits = Dense(out_shape, activation = None, name="logits")(x_permute)#x_permute is a tensor with shape (?,1876,96)
loss_ctc = Lambda(ctc_lambda_func, name='ctc_my')(
[logits, labels, x_len, lab_len])
model = Model(inputs=[x, labels, x_len, lab_len], outputs=[loss_ctc])
model.compile(loss={'ctc_my': lambda y_true,y_pred: y_pred}, optimizer='adadelta')

正常代码(logits的元素不是nan(:

logits = Dense(out_shape, activation = None, name="logits")(x_permute)#x_permute is a tensor with shape (?,1876,96)
output = Activation(activation="softmax", name="softmax")(logits)
loss_ctc = Lambda(ctc_lambda_func, name='ctc_my')(
[output, labels, x_len, lab_len])
model = Model(inputs=[x, labels, x_len, lab_len], outputs=[loss_ctc])
model.compile(loss={'ctc_my': lambda y_true,y_pred: y_pred}, optimizer='adadelta')
def ctc_lambda_func(args):
y_pred, y_true, input_length, label_length = args
return ctc_batch_cost(y_true, y_pred,input_length,label_length)

有人帮忙吗?非常感谢。

我可能误解了你,但你为什么想要activation="none"?也许你想用的是线性激活?

看看Keras激活函数

根据Klemen Grm

你的神经网络是完全线性的。您可能会为隐藏层和输出层考虑不同的激活函数(例如:tanh、sigmoid、linear(。这既可以限制输出范围,也可能改善网络的学习特性。

除了克莱曼所说的,最后一个你想要的是softmax,将输出归一化为概率。

神经网络必须实现复杂的映射函数,因此它们需要非线性的激活函数,以便引入急需的非线性特性,使其能够近似任何函数。没有激活函数的神经元等同于具有线性激活函数的神经元

最新更新