如何访问对象中的嵌套属性

2024-04-19 06:05:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是tensorflow对象检测器代码,但这并不完全是tensorflow问题。我做了一个函数来保存最有用的参数到一个文本文件。我正在使用代码:

configs = config_util.get_configs_from_pipeline_file(FLAGS.pipeline_config_path)

获取实际的config对象。config本身是dict,但它包含的值都是特定于tensorflow的对象。你知道吗

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

每个对象都包含其他tensorflow类对象,我可以通过getattr函数访问这些对象,例如:

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似乎对这些对象不起作用。你知道吗

我想知道有没有什么方法可以得到这个值是不是一个更漂亮的方法?一种不易出错的方法,即使不知道实际的文本配置文件也适用。你知道吗

严格地说,这不是一个tensorflow问题,因为getattr方法可以应用于任何具有属性的对象,但是如果存在一个tensorflow解决方案,我就可以接受它。你知道吗


Tags: 对象方法configmodelobjecttensorflowtypetrain