首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Keras损失函数值错误: ValueError:操作的梯度为“`None`”。浅谈LSTM网络

Keras损失函数值错误: ValueError:操作的梯度为“`None`”。浅谈LSTM网络
EN

Stack Overflow用户
提问于 2020-05-30 12:27:31
回答 1查看 180关注 0票数 1

因此,我试图训练我的LSTM网络语言模型,并使用一个困惑函数作为我的损失函数,但是我得到了以下错误:

代码语言:javascript
复制
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.

我的损失函数如下:

代码语言:javascript
复制
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

我创建我的模型如下:

代码语言:javascript
复制
# 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)

当我试图拟合我的模型时,会发生错误。有谁知道是什么导致了错误,以及如何修复它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-30 12:44:26

这就是罪魁祸首:K.argmaxK.max。他们没有梯度。我也认为你只是直截了当地不需要他们在你的损失度量!这是因为maxing和argmaxing删除了关于预测有多错误的信息。

我不知道你想要衡量什么样的损失,但我想你是在寻找像tf.exp(tf.nn.sigmoid_cross_entropy_with_logits(y_true, y_pred))tf.exp(tf.softmax_cross_entopy_with_logits(y_true, y_pred))这样的东西。您可能需要使用tf.one_hot将您的日志转换为一个热编码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62102437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档