Можно ли передать объект python из файла конфигурации?

#python #json #tensorflow #configuration #yaml

Вопрос:

Я не возражаю, если это YAML, JSON,. ini или что-то еще.

Пользователь должен иметь возможность изменять reduction значение при вызове tf.keras.losses.Функция CategoricalHinge с помощью файла конфигурации, как показано ниже:

 import tensorflow as tf

# config file reading happens here (expected scenario):
f = read_the_config_file()
reduction = f["reduction"]  # retrieved the reduction value

# pass `reduction` to the loss function:
loss = tf.keras.losses(reduction)
 

reduction может быть либо tf.keras.losses.Reduction.NONE или tf.keras.losses.Reduction.AUTO . Эти значения являются объектами tensorflow.

Пример файла JSON, который я ожидал бы, будет похож на:

 {
"reduction ": tf.keras.losses.Reduction.NONE
}
 

Но очевидно, что это недопустимый файл JSON.

Вопрос:

Существуют ли способы разрешить пользователю передавать такой параметр в файле конфигурации? Если нет, то каковы другие способы получения такого пользовательского ввода без сохранения сопоставления строки с объектом в пользовательском коде?

Ответ №1:

Я не очень хорошо знаком с Python, но я предполагаю, что вы можете реализовать read_the_config_file() функцию не только (1) считывания содержимого файла конфигурации в словарь, но и замены некоторых строковых значений значениями объектов для нескольких специальных записей в словаре, таких как reduction в вашем примере. По крайней мере, таким образом код сопоставления строк с объектами инкапсулируется внутри read_the_contents_file() , а не распространяется в остальной части пользовательского кода.