Как загрузить модуль Python из строки? - PullRequest
1 голос
/ 18 апреля 2019

Учитывая строку

optimizer = "tensorflow.train.ProximalAdagradOptimizer"

Как мне добиться следующего:

import tensorflow
optimizer = tensorflow.train.ProximalAdagradOptimizer()

Контекст

Чтобы добавить контекст в мой конкретный вариант использования (для решения одного из комментариев): я пытаюсь создать текстовую конфигурацию, которая описывает, как была сконфигурирована моя модель (в частности: оценщик). Таким образом, я могу легко восстановить их после тренировки, если захочу больше тренироваться или делать с ними другие вещи. Я не нашел простой способ сделать это; Я не ищу save_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.

Ответы [ 2 ]

2 голосов
/ 18 апреля 2019

Вы можете сделать что-то вроде этого:

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 голосов
/ 18 апреля 2019

вы могли бы использовать функцию eval это не лучший ответ, но делает работу

if "tensorflow" in optimizer:
    import tensorflow
    optimizer = eval(optimizer + '()')

, вы не можете сделать это: eval("import tensorflow")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...