【问题标题】:Keras loss function value error: ValueError: An operation has `None` for gradient. on LSTM networkKeras 损失函数值错误:ValueError: An operation has `None` for gradient。在 LSTM 网络上
【发布时间】:2020-05-30 20:44:26
【问题描述】:

所以我正在尝试训练我的 LSTM 网络语言模型,并使用困惑函数作为我的损失函数,但我收到以下错误:

ValueError: An operation has `None` for gradient. Please make sure that all of your ops have a gradient defined (i.e. are differentiable). Common ops without gradient: K.argmax, K.round, K.eval.

我的损失函数如下所示:

from keras import backend as K
def perplexity_raw(y_true, y_pred):
    """
    The perplexity metric. Why isn't this part of Keras yet?!
    https://stackoverflow.com/questions/41881308/how-to-calculate-perplexity-of-rnn-in-tensorflow
    https://github.com/keras-team/keras/issues/8267
    """
#     cross_entropy = K.sparse_categorical_crossentropy(y_true, y_pred)
    cross_entropy = K.cast(K.equal(K.max(y_true, axis=-1),
                          K.cast(K.argmax(y_pred, axis=-1), K.floatx())),
                  K.floatx())
    perplexity = K.exp(cross_entropy)
    return perplexity

我创建我的模型如下:

# define model
model = Sequential()
model.add(Embedding(vocab_size, 500, input_length=max_length-1))
model.add(LSTM(750))
model.add(Dense(vocab_size, activation='softmax'))
print(model.summary())
# compile network
model.compile(loss=perplexity_raw, optimizer='adam', metrics=['accuracy'])
# fit network
model.fit(X, y, epochs=150, verbose=2)

当我尝试拟合我的模型时发生错误。有谁知道导致错误的原因以及如何解决?

【问题讨论】:

    标签: python tensorflow machine-learning keras


    【解决方案1】:

    这些是罪魁祸首:K.argmaxK.max。它们没有渐变。我也认为你直接不需要它们在你的损失指标中!那是因为maxing 和argmaxing 删除了关于预测错误的信息多少

    我不知道你想测量什么样的损失,但我认为你正在寻找类似 @​​987654325@ 或 tf.exp(tf.softmax_cross_entopy_with_logits(y_true, y_pred)) 的东西。您可能需要使用 tf.one_hot 将您的 logits 转换为一种热编码。

    【讨论】:

    • 感谢您的帮助,但我该如何调用我的 logits 来对其进行编码?
    猜你喜欢
    • 2018-08-19
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 2016-03-11
    • 2020-12-24
    • 1970-01-01
    相关资源
    最近更新 更多