根据keras-team/keras/pull/9393/files,我一直使用精确度和召回率作为我的指标
敏感性和特异性是我想要优化的。每个时代我都会输出它:
class SensitivitySpecificityCallback(Callback):
def on_epoch_end(self, epoch, logs=None):
if epoch:
x_test = self.validation_data[0]
y_test = self.validation_data[1]
predictions = self.model.predict(x_test)
output_sensitivity_specificity(epoch, predictions, y_test)
def output_sensitivity_specificity(epoch, predictions, y_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('[{:03d}] sensitivity'.format(epoch), c[0, 0] / (c[0, 1] + c[0, 0]))
print('[{:03d}] specificity'.format(epoch), c[1, 1] / (c[1, 1] + c[1, 0]))
在我的第 203 个 epoch,我得到了一个很好的结果,然后一切都在下坡——方向错误!——从那里开始。
如何优化灵敏度和特异性?- 考虑更新权重,和/或开发自定义损失函数……