tensorflow - 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
错了。
我如何从每个时期的敏感性和特异性结果中学习?
解决方案
要从敏感性和特异性结果中学习,您可以编写一个自定义损失函数,其中根据您的混淆矩阵结果计算损失。或者,您可以尝试class_weight
keras model.fit()中的参数,并根据您的模型发现哪些类更难学习,为类分配不同的权重。
推荐阅读
- powershell - 如何将此 PowerShell 命令输出放入可迭代的集合或数组中
- sql - SQL XML contains() 和 fn:lowercase()
- cakephp - CakePHP 如何获取关联数据和 COUNT/GROUP BY
- .net - 在 Web API Core 3.1 的 RDLC 报告中动态显示图像
- javascript - HTML5 视频 - 字幕定位
- python - 无法从 python 引用现有的 QML 元素
- spring - @EnableTransactionManagement 打破了我的测试
- java - 为什么 equals 在我的 java 代码中返回 false?
- arrays - 弹出一个数组就是弹出另一个数组 DFS 递归
- java - 是否可以创建一个返回 try/catch 的方法?