Python 在Keras&;中使用model.fit()时,如何选择要登录命令行的度量子集;张量流

Python 在Keras&;中使用model.fit()时,如何选择要登录命令行的度量子集;张量流,python,tensorflow,keras,tensorflow2.0,Python,Tensorflow,Keras,Tensorflow2.0,我在Keras和Tensorflow中添加了许多指标来跟踪我的多类细分模型的性能。这些度量包括类度量函数和聚合度量函数。现在Tensorboard包含了我想要的所有内容,但是我的命令行输出现在看起来过载了。我想从命令行输出中删除类度量,同时将它们保留在Tensorboard中。可能吗 model.compile(loss=dice_loss, metrics=[f1score, f1score_class0, f1score_class1, f1score_clas

我在Keras和
Tensorflow
中添加了许多指标来跟踪我的多类细分模型的性能。这些度量包括类度量函数和聚合度量函数。现在Tensorboard包含了我想要的所有内容,但是我的命令行输出现在看起来过载了。我想从命令行输出中删除类度量,同时将它们保留在Tensorboard中。可能吗

model.compile(loss=dice_loss, 
              metrics=[f1score, f1score_class0, f1score_class1, f1score_class2])

我自己执行
训练步骤
测试步骤
时是否可能?我是否需要从头开始实施培训循环?

这可以通过回调轻松完成。即:

  • 编写一个回调,只打印您感兴趣的指标。关于如何编写回调,请参阅
  • model.fit
    中设置
    verbose=0
    并将回调添加到
    callbacks
  • 进行培训
  • 据我所知,tensorboard使用所有原木。因此,它将从所有epoche获取所有度量


    如果您在培训期间根本不需要打印任何信息,您可以根据Ivan K的答案设置
    verbose=0

    。我想出了另一个主意:

    keras.callbacks.ProgbarLogger
    负责记录到命令行。 可以将keras的
    ProgbarLogger
    子类化,并将
    ProgbarLogger
    添加到回调中。这将阻止Keras添加默认的
    ProgbarLogger
    ,从而替换它。只需实现所有将日志作为参数接收的方法,过滤日志并将过滤后的日志传递给相应的父类方法

    此示例删除在
    opt_out
    列表中包含子字符串的日志

    import tensorflow as tf
    class CustomProgbarLogger(tf.keras.callbacks.ProgbarLogger):
        def __init__(self, count_mode="samples", stateful_metrics=None, opt_out=[]):
            super().__init__(count_mode=count_mode, stateful_metrics=stateful_metrics)
            self.opt_out = opt_out
    
        def _filter(self, logname):
            return all(word not in logname for word in self.opt_out)
    
        def _filter_logs(self, logs):
            return logs and {key: value for key, value in logs.items() if self._filter(key)}
    
        def on_train_batch_end(self, batch, logs=None):
            super().on_train_batch_end(batch, self._filter_logs(logs))
    
        def on_test_batch_end(self, batch, logs=None):
            super().on_test_batch_end(batch, self._filter_logs(logs))
    
        def on_epoch_end(self, epoch, logs=None):
            super().on_epoch_end(epoch, self._filter_logs(logs))
    
        def on_test_end(self, logs=None):
            super().on_test_end(self._filter_logs(logs))
    
        def on_predict_end(self, logs=None):
            super().on_predict_end(self._filter_logs(logs))
    
    此示例将删除包含键中字符串
    class
    precision
    recall
    之一的每个日志

    progbar_callback = CustomProgbarLogger(opt_out=["class", "precision", "recall"])
    model.fit(dataset, callbacks=[progbar_callback, tensorboard_callback])
    

    最有可能的是,它应该是
    model.compile
    ,而不是
    model.fit
    @IvanK。你说得对。