首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每10个时期报告一次Keras模型评估指标?

每10个时期报告一次Keras模型评估指标?
EN

Stack Overflow用户
提问于 2018-05-28 22:19:35
回答 1查看 6.5K关注 0票数 5

我想知道我的模型的特异性和敏感性。目前,我正在评估所有时期完成后的模型:

代码语言:javascript
复制
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]))

这种方法的缺点是,我只有在训练结束后才能获得我关心的输出。我更喜欢每10个时期左右获得一次指标。

顺便说一句:尝试使用metrics=[] here。有没有可能callback是个好办法?

EN

回答 1

Stack Overflow用户

发布于 2018-05-28 23:05:00

自定义Callback将是一个很好的解决方案,它可以让您对训练过程进行足够的控制。大致是这样的:

代码语言:javascript
复制
class SensitivitySpecificityCallback(Callback):
    def on_epoch_end(self, epoch, logs=None):
        if epoch % 10 == 1:
            x_test = self.validation_data[0]
            y_test = self.validation_data[1]
            # x_test, y_test = self.validation_data
            predictions = self.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是纪元号,logs包含通常的指标+模型列车的损失。

然后使用以下命令运行:

代码语言:javascript
复制
model.fit(x_train, y_train,
          batch_size=batch_size,
          epochs=epochs,
          verbose=1,
          shuffle='batch',
          validation_data=(x_test, y_test),
          callbacks=[SensitivitySpecificityCallback()])

注意:如果你不喜欢你的模型基于你的指标进行训练的方式,你可以用以下方法缩短训练:

代码语言:javascript
复制
self.model.stop_training = True

这将会停止你的训练。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50568409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档