Python 在Keras&;中使用model.fit()时,如何选择要登录命令行的度量子集;张量流
我在Keras和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
Tensorflow
中添加了许多指标来跟踪我的多类细分模型的性能。这些度量包括类度量函数和聚合度量函数。现在Tensorboard包含了我想要的所有内容,但是我的命令行输出现在看起来过载了。我想从命令行输出中删除类度量,同时将它们保留在Tensorboard中。可能吗
model.compile(loss=dice_loss,
metrics=[f1score, f1score_class0, f1score_class1, f1score_class2])
我自己执行
训练步骤
和测试步骤
时是否可能?我是否需要从头开始实施培训循环?这可以通过回调轻松完成。即:
model.fit
中设置verbose=0
并将回调添加到callbacks
如果您在培训期间根本不需要打印任何信息,您可以根据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。你说得对。