我想知道我的模型的特异性和敏感性。目前,我正在评估所有时期完成后的模型:
from sklearn.metrics import confusion_matrix
predictions = model.predict(x_test)
y_test = np.argmax(y_test, axis=-1)
predictions = np.argmax(predictions, axis=-1)
c = confusion_matrix(y_test, predictions)
print('Confusion matrix:\n', c)
print('sensitivity', c[0, 0] / (c[0, 1] + c[0, 0]))
print('specificity', c[1, 1] / (c[1, 1] + c[1, 0]))这种方法的缺点是,我只有在训练结束后才能获得我关心的输出。我更喜欢每10个时期左右获得一次指标。
顺便说一句:尝试使用metrics=[] here。有没有可能callback是个好办法?
发布于 2018-05-28 23:05:00
自定义Callback将是一个很好的解决方案,它可以让您对训练过程进行足够的控制。大致是这样的:
class SensitivitySpecificityCallback(Callback):
def on_epoch_end(self, epoch, logs=None):
if epoch % 10 == 1:
x_test = self.validation_data[0]
y_test = self.validation_data[1]
# x_test, y_test = self.validation_data
predictions = self.model.predict(x_test)
y_test = np.argmax(y_test, axis=-1)
predictions = np.argmax(predictions, axis=-1)
c = confusion_matrix(y_test, predictions)
print('Confusion matrix:\n', c)
print('sensitivity', c[0, 0] / (c[0, 1] + c[0, 0]))
print('specificity', c[1, 1] / (c[1, 1] + c[1, 0]))其中epoch是纪元号,logs包含通常的指标+模型列车的损失。
然后使用以下命令运行:
model.fit(x_train, y_train,
batch_size=batch_size,
epochs=epochs,
verbose=1,
shuffle='batch',
validation_data=(x_test, y_test),
callbacks=[SensitivitySpecificityCallback()])注意:如果你不喜欢你的模型基于你的指标进行训练的方式,你可以用以下方法缩短训练:
self.model.stop_training = True这将会停止你的训练。
https://stackoverflow.com/questions/50568409
复制相似问题