我有一个 Python 函数调用,如下所示:
import torchvision
model = torchvision.models.resnet18(pretrained=configs.use_trained_models)
效果很好。
如果我尝试使其动态化:
import torchvision
model_name = 'resnet18'
model = torchvision.models[model_name](pretrained=configs.use_trained_models)
然后它失败:
TypeError: 'module' object is not subscriptable
这是有道理的,因为model
是一个导出很多东西的模块,包括 resnet 函数:
# __init__.py for the "models" module
...
from .resnet import *
...
如何在不提前知道其名称的情况下动态调用该函数(除了获得带有函数名称的字符串)?
您可以使用getattr https://docs.python.org/3/library/functions.html#getattr功能:
import torchvision
model_name = 'resnet18'
model = getattr(torchvision.models, model_name)(pretrained=configs.use_trained_models)
这本质上与点符号相同,只是以函数形式接受字符串来检索属性/方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)