如何从字符串加载python模块?

如何从字符串加载python模块?,python,python-3.x,tensorflow,module,Python,Python 3.x,Tensorflow,Module,给定字符串 optimizer = "tensorflow.train.ProximalAdagradOptimizer" 我如何实现以下目标: import tensorflow optimizer = tensorflow.train.ProximalAdagradOptimizer() 上下文 为我的特定用例添加上下文(解决其中一个注释):我正在尝试创建一个基于文本的配置,描述如何配置我的模型(特别是:estimator)。这样,如果我想对它们进行更多的训练或做其他事情,我可以在训练后

给定字符串

optimizer = "tensorflow.train.ProximalAdagradOptimizer"
我如何实现以下目标:

import tensorflow
optimizer = tensorflow.train.ProximalAdagradOptimizer()
上下文 为我的特定用例添加上下文(解决其中一个注释):我正在尝试创建一个基于文本的配置,描述如何配置我的模型(特别是:estimator)。这样,如果我想对它们进行更多的训练或做其他事情,我可以在训练后轻松地重新实例化它们。我还没有找到一个简单的方法来做到这一点;我不是在为这个寻找一个保存的模型。我的用例是在将模型提交到保存的模型状态之前轻松地重新加载模型。配置将如下所示:

model_config = {
  "type": "DNNClassifier",
  "n_classes": 10,
  "feature_columns": [
    {
      "numeric_column": [
        {
          "key": "x"
        },
        {
          "key": "y"
        }
      ]
    }
  ],
  "optimizer": {
    "AdamOptimizer": {
      "learning_rate": 1.0
    }
  }
}
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()
考虑到“配置”,我可以用以下方法实例化我的估计器:

estimator = load_estimator(model_config, model_dir=model_dir)

type
的值将解析为
tensorflow.estimator.DNNClassifier
feature\u column[0]。
的值将解析为
tensorflow.feature\u column.numeric\u column
。最后,
optimizer.
的值将解析为
tensorflow.train.AdamOptimizer

您可以使用该函数,它不是最佳答案,但可以完成任务

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

您不能这样做:
eval(“导入tensorflow”)
您可以这样做:

model_config = {
  "type": "DNNClassifier",
  "n_classes": 10,
  "feature_columns": [
    {
      "numeric_column": [
        {
          "key": "x"
        },
        {
          "key": "y"
        }
      ]
    }
  ],
  "optimizer": {
    "AdamOptimizer": {
      "learning_rate": 1.0
    }
  }
}
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()

我更改了优化器以避免由于示例中缺少学习速率参数而导致的错误。

您没有解释如何在第二个代码中使用此字符串。代码中没有字符串。可能您只需要
optimizer=tensorflow.train.proximaladagradpimizer
而不使用
()
以后,您可以执行
优化器()