Keras / Tensorflow:优化学习以获得更好的灵敏度&专一?

时间:2018-06-04 05:21:28

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

目前我一直在学习:

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

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

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

1 个答案:

答案 0 :(得分:0)

要从灵敏度和特异性结果中学习,您可以编写自定义损失函数,其中根据您的混淆矩阵结果计算损失。或者,您可以尝试使用keras model.fit()中的class_weight参数,并根据您的模型难以学习的内容为类指定不同的权重。