gpt4 book ai didi

python - Keras - 如何获得非规范化的 logits 而不是概率

转载 作者:行者123 更新时间:2023-12-03 15:07:13 32 4
gpt4 key购买 nike

我正在 Keras 中创建一个模型并想计算我自己的指标(困惑度)。这需要使用非标准化概率/logits。然而,keras 模型只返回 softmax 概率:

model = Sequential()
model.add(embedding_layer)
model.add(LSTM(n_hidden, return_sequences=False))
model.add(Dropout(dropout_keep_prob))
model.add(Dense(vocab_size))
model.add(Activation('softmax'))
optimizer = RMSprop(lr=self.lr)

model.compile(optimizer=optimizer,
loss='sparse_categorical_crossentropy')

Keras FAQ有一个解决方案来获得中间层的输出 here .给出了另一个解决方案 here .但是,这些答案将中间输出存储在不同的模型中,这不是我需要的。
我想将 logits 用于我的自定义指标。自定义指标应包含在 model.compile() 中函数,以便在训练期间对其进行评估和显示。所以我不需要 Dense 的输出层在不同的模型中分离,但作为我原始模型的一部分。

简而言之,我的问题是:
  • 当定义自定义指标时 here使用 def custom_metric(y_true, y_pred) , y_pred包含对数或归一化概率?
  • 如果它包含归一化概率,我如何获得非归一化概率,即 Dense 的 logits 输出层?
  • 最佳答案

    我想我已经找到了解决方案

    首先,我将激活层更改为线性,以便我收到@loannis Nasios 概述的 logits。

    二、还是拿到了sparse_categorical_crossentropy作为损失函数,我定义了自己的损失函数,将 from_logits 参数设置为 true。

    model.add(embedding_layer)
    model.add(LSTM(n_hidden, return_sequences=False))
    model.add(Dropout(dropout_keep_prob))
    model.add(Dense(vocab_size))
    model.add(Activation('linear'))
    optimizer = RMSprop(lr=self.lr)


    def my_sparse_categorical_crossentropy(y_true, y_pred):
    return K.sparse_categorical_crossentropy(y_true, y_pred, from_logits=True)

    model.compile(optimizer=optimizer,loss=my_sparse_categorical_crossentropy)

    关于python - Keras - 如何获得非规范化的 logits 而不是概率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47036409/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com