【问题标题】:Keras / Tensorflow: optimise learning for better sensitivity & specificity?Keras / Tensorflow:优化器学习以获得更好的灵敏度和特异性?
【发布时间】:2018-11-13 09:20:13
【问题描述】:

目前我是这样学习的:

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 是错误的。

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

【问题讨论】:

    标签: tensorflow optimization keras deep-learning loss-function


    【解决方案1】:

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

    【讨论】:

    • 嗯,我认为你是对的,这就是我应该做的。你能包括一个代码示例吗? - 既不清楚为class_weight 生成什么字典,也不清楚如何从(y_true, y_pred) 转到(predictions, y_test)。只是(np.argmax(y_true, axis=-1), model.predict(y_pred))
    猜你喜欢
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多