首页 > 解决方案 > Keras / Tensorflow:优化学习以获得更好的敏感性和特异性?

问题描述

目前我一直在学习:

model.compile(loss=keras.losses.categorical_crossentropy,
              optimizer=keras.optimizers.Adadelta(),
              metrics=['accuracy'])

model.fit(x_train, y_train,
          batch_size=batch_size,
          epochs=epochs,
          verbose=1,
          shuffle='batch',
          validation_data=(x_test, y_test),
          callbacks=callbacks)

随着这些指标在每个时期输出,所以我知道它的表现如何:

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]))

根据我的架构,我在 epoch 93 或 155 获得更好的结果;然后它变得更糟。很明显我metrics错了。

我如何从每个时期的敏感性和特异性结果中学习?

标签: tensorflowoptimizationkerasdeep-learningloss-function

解决方案


要从敏感性和特异性结果中学习,您可以编写一个自定义损失函数,其中根据您的混淆矩阵结果计算损失。或者,您可以尝试class_weightkeras model.fit()中的参数,并根据您的模型发现哪些类更难学习,为类分配不同的权重。


推荐阅读