给出字符串
optimizer = "tensorflow.train.ProximalAdagradOptimizer"
如何实现以下目标:
import tensorflow
optimizer = tensorflow.train.ProximalAdagradOptimizer()
要将上下文添加到我的特定用例中(以解决其中的一条评论):我正在尝试创建一个基于文本的配置,该配置描述了我的模型(具体而言是estimator)的配置方式。这样,如果我想更多地训练或与他们一起做其他事情,我可以在训练后轻松地重新实例化它们。我还没有找到一种简单的方法来做到这一点。我不是为此寻找一个saved_model。我的用例是在将模型提交到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
。
答案 0 :(得分:2)
您可以使用函数eval来解决问题,但这不是最好的答案
if "tensorflow" in optimizer:
import tensorflow
optimizer = eval(optimizer + '()')
您不能这样做:eval("import tensorflow")
答案 1 :(得分:2)
您可以执行以下操作:
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()
我更改了优化器,以避免由于示例中缺少学习率参数而导致错误。