为了账号安全,请及时绑定邮箱和手机立即绑定

从 Keras Lstm 模型中获取 n 个高概率输出的精度

从 Keras Lstm 模型中获取 n 个高概率输出的精度

桃花长相依 2022-01-18 16:58:36
我有一个用于序列预测的 Lstm 模型,如下所示:def create_model(max_sequence_len, total_words):    input_len = max_sequence_len - 1    model = keras.models.Sequential()    model.add(layers.Embedding(total_words, 50, input_length=input_len))    model.add(layers.LSTM(50, input_shape=predictors[:1].shape))    model.add(layers.Dropout(0.2))    model.add(layers.Dense(activation='softmax', units = total_words))    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'], lr=0.01)      return modelmodel_sb = create_model(max_sequence_len, total_words)history = model_sb.fit(X_train, y_train, epochs = 20 , shuffle = True, validation_split=0.3, )它运行良好,但我想从我的模型中获取 2 个输出,它们是 softmax 密集层中概率最大的输出。为了带走他们,我可以使用以下代码:predicted = model_sb.predict(test_sequence, verbose=1) 然后通过这段代码找到前n个高概率输出:y_sum = predicted.sum(axis=0)ind = np.argpartition(y_sum, -n)[-n:]ind[np.argsort(y_sum[ind])]但是如果输出是这些 n 输出之一(带有“或”条件),我需要知道我的模型的准确性是否有任何包可以帮助我?我的意思是我不想只用一个最大概率输出来评估我的模型,我想通过 2 个高概率结果来评估准确性和损失。
查看完整描述

1 回答

?
达令说

TA贡献1821条经验 获得超6个赞

k = 2在您的情况下,这称为 top-k 准确性。Keras 已经实现了这种准确性:


from keras.metrics import top_k_categorical_accuracy


def my_acc(y_true, y_pred):

    return top_k_categorical_accuracy(y_true, y_pred, k=2)

然后将此自定义指标传递给您的模型:


model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=[my_acc]) 


查看完整回答
反对 回复 2022-01-18
  • 1 回答
  • 0 关注
  • 204 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信