【发布时间】:2018-04-12 16:21:34
【问题描述】:
我正在 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 层的输出分隔在不同的模型中,而是作为我原始模型的一部分。
简而言之,我的问题是:
使用
def custom_metric(y_true, y_pred)定义here 概述的自定义指标时,y_pred是否包含logits 或归一化概率?如果它包含归一化的概率,我怎样才能得到非归一化的概率,即
Dense层输出的logits?
【问题讨论】:
-
所以你想保留这个模型或者你可以改变它?你想保持 sparse_categorical_crossentropy 作为损失吗?
-
产生相同最终结果的替代方案是什么?
标签: python machine-learning keras neural-network nlp