【发布时间】:2020-11-30 02:43:18
【问题描述】:
我正在尝试使用一个函数来迭代地返回几个机器学习模型(泡菜),其中一个函数基于我指定的准确度截止值。
我的问题是我正在尝试使用 eval 加载泡菜,因为它们的名称对应于 sdf['number'] 给出的数字。 eval 函数没有加载我的泡菜,除此之外,我希望它们由我的函数加载和返回。我已经通过尝试在加载每个模型之后直接通过每个模型运行数据来测试这一点,然后再移动到下一个模型,但它返回“learn0 not defined”例如。
关于如何更好地迭代地做到这一点有什么想法吗?
变量解释:
jar = 我使用的不同变量名称(学习者名称)的列表 预计它会加载。例如learn0、learn1等。
截止=准确截止
sdf_temp = 临时研究数据帧
def piklJar(sdf,cutoff):
sdf_temp = sdf[sdf['value'] <= cutoff]
jar = []
i=0
for pklNum in sdf_temp['number']:
eval('"learn{} = load_learner({}/Models/Pkl {}.pkl)".format(i,datapath,pklNum)')
jar.append('learn{}'.format(i))
i+=1
return jar
【问题讨论】:
-
在这里使用
eval没有意义。除非你正在做一些严肃的元编程或实际上需要 python 解释器(例如编写 repl),否则你几乎不需要 eval,它几乎从来都不是一个好的解决方案 -
@juanpa.arrivillaga 有什么替代建议吗?
-
@En_g_neer 你的
jar变量在这里只是一个字符串列表,因为你附加的是一个字符串而不是变量。由于您要返回一个列表,因此分配唯一的变量名是没有用的 -
正确,@MZ,我也打算返回字符串列表,所以我有一个列表供我正在加载的所有学习者参考。幸运的是,马克为我解决了这个问题。
标签: python python-3.x list-comprehension pickle fast-ai