从Keras Lstm模型中获取n个高概率输出的准确率
Take accuracy of n high probability output from Keras Lstm model
我有一个用于序列预测的 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 个输出之一(具有 "or" 条件),我需要知道我的模型的准确性
有什么包裹可以帮助我吗?
我的意思是我不想只用一个最大概率输出来评估我的模型,我想用 2 个高概率结果来评估准确性和损失。
这称为 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])
我有一个用于序列预测的 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 个输出之一(具有 "or" 条件),我需要知道我的模型的准确性 有什么包裹可以帮助我吗? 我的意思是我不想只用一个最大概率输出来评估我的模型,我想用 2 个高概率结果来评估准确性和损失。
这称为 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])