语言模型使用keras.backend.pow文件()

2024-03-28 17:36:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我实现了一个perplexity()函数来评估Keras中的LSTM语言模型。我使用的是cross entropy lossone-hot encoding。由此产生的困惑不是exp(loss)。你知道吗

我采用了来自this github discussion的困惑代码,并按照this stackoverflow post中的建议,将基数从2改为e。你知道吗

我还写了一个回调来计算困惑。这个回调计算正确的复杂度(exp(loss))。你知道吗

一些额外的背景信息:
-tensorflow: 1.14.0
-keras: 2.2.4
-数据集:宾夕法尼亚州树状银行(PTB)
-loss: categorical_crossentropy()

perplexity()函数。你知道吗

from keras import backend as K

def perplexity(true_label, pred_label):
  cross_entropy = K.categorical_crossentropy(true_label, pred_label)
  return K.exp(cross_entropy)

回调类。你知道吗

class Perplexity(Callback):
  def on_epoch_end(self, epoch, logs={}):
    super().on_epoch_end(epoch,logs)
    print(f"Callback Perplexity: {K.eval(K.exp(logs['loss']))}")

这是模型。忽略不相关的变量。你知道吗

model = Sequential()
model.add(Embedding(...))
model.add(LSTM(...))
model.add(Dense(activation='softmax', ...))
model.compile(loss='categorical_crossentropy', metrics=[perplexity], ...)
model.summary()

model.fit_generator(callbacks=[Perplexity()], ...)

例如,如果cross entropy loss7.0554
-perplexity()函数给出9555.6286
-回调给出1158.995545671746
回调的结果接近预期的复杂度exp(7.0554)=1159.101019。你知道吗

如何使用perplexity()函数来计算正确的复杂度?我的代码中有什么错误吗?如果需要,我可以提供更多的代码。提前谢谢。你知道吗


Tags: 函数代码addmodel复杂度labellogsentropy