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

时间:2019-04-22 13:26:20

标签: python tensorflow keras lstm softmax

我有一个用于序列预测的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 model

model_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 个答案:

答案 0 :(得分:1)

这称为top-k精度,在您的情况下为k = 2。 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])