我正在使用tensorflow对象检测器代码,但这不仅是一个tensorflow问题。我做了一个将最有用的参数保存到文本文件的功能。我正在使用代码:
configs = config_util.get_configs_from_pipeline_file(FLAGS.pipeline_config_path)
以获得实际的config
对象。 config
本身是dict
,但其中包含的值都是特定于张量流的对象。
model_config = configs['model']
type(model_config)
object_detection.protos.model_pb2.DetectionModel
train_config = configs['train_config']
type(train_config)
object_detection.protos.train_pb2.TrainConfig
每个对象都包含其他我可以通过getattr
函数访问的tensorflow类对象:
type(getattr(train_config.optimizer, 'rms_prop_optimizer'))
object_detection.protos.optimizer_pb2.RMSPropOptimizer
由于我可以在实际的文本配置文件中看到各种参数,因此可以使用其中的getattr
链来获取我感兴趣的实际值。问题在于它变得很长(而且很丑陋)我会说),但这样做并不正确。例如,要从sample config file获得实际的学习率,我将必须使用:
getattr(getattr(getattr(getattr(train_config.optimizer, 'momentum_optimizer'), 'learning_rate'), 'manual_step_learning_rate'), 'initial_learning_rate')
0.0003000000142492354
好的,这里有一些舍入错误,但这不是重点。
我想提一下,使用更高级别的item in object
似乎不适用于这些对象。
我想知道是否有任何方法可以通过更漂亮的方法获得该价值?即使不知道实际的文本配置文件,也更容易出错,并且仍然可以应用。
严格来说,这不是张量流问题,因为getattr
方法可以应用于具有属性的任何对象,但是如果存在张量流解决方案,我会开放。