#python #python-3.x #tensorflow #module
#python #python-3.x #тензорный поток #модуль
Вопрос:
Учитывая строку
optimizer = "tensorflow.train.ProximalAdagradOptimizer"
Как я могу добиться следующего:
import tensorflow
optimizer = tensorflow.train.ProximalAdagradOptimizer()
Контекст
Чтобы добавить контекст к моему конкретному варианту использования (для решения одного из комментариев): я пытаюсь создать текстовую конфигурацию, которая описывает, как была настроена моя модель (в частности: оценщик). Таким образом, я могу легко повторно создать их экземпляр после обучения, если захочу обучить его больше или сделать с ними что-то другое. Я не нашел простого способа сделать это; Я не ищу saved_model для этого. Мой вариант использования — легко перезагружать модели перед их переводом в состояние saved_model. Конфигурация будет выглядеть примерно так:
model_config = {
"type": "DNNClassifier",
"n_classes": 10,
"feature_columns": [
{
"numeric_column": [
{
"key": "x"
},
{
"key": "y"
}
]
}
],
"optimizer": {
"AdamOptimizer": {
"learning_rate": 1.0
}
}
}
Учитывая, что «config» я могу создать экземпляр моей оценки с помощью:
estimator = load_estimator(model_config, model_dir=model_dir)
Значение type
будет tensorflow.estimator.DNNClassifier
равно . Значение feature_column[0].<key>
будет tensorflow.feature_column.numeric_column
равно . Наконец, значение optimizer.<key>
будет tensorflow.train.AdamOptimizer
равно .
Комментарии:
1. вы не объяснили, как вы хотите использовать эту строку во втором коде. В вашем коде нет строки. Может быть, вам нужно только
optimizer = tensorflow.train.ProximalAdagradOptimizer
без()
, а позже вы можете выполнитьoptimizer()
.
Ответ №1:
Вы можете сделать что-то вроде этого:
import importlib
def get_object_by_name(qualname):
module, _, object = qualname.rpartition(".")
if module:
# package parameter is only necessary for relative imports
# (here relative to this package)
vs = vars(importlib.import_module(module, package=__package__))
else:
# If no module name we assume it is from the current module
vs = globals()
return vs[object]
optimizer_qualname = "tensorflow.train.AdamOptimizer"
optimizer_class = get_object_by_name(optimizer_qualname)
optimizer = optimizer_class()
Я изменил оптимизатор, чтобы избежать ошибки из-за отсутствия параметра скорости обучения в примере.
Ответ №2:
вы могли бы с помощью функции eval это не лучший ответ, но он выполняет свою работу
if "tensorflow" in optimizer:
import tensorflow
optimizer = eval(optimizer '()')
ты не можешь этого сделать : eval("import tensorflow")