Python 如何将枚举传递给ParameterGrid?
我想将几个参数传递给一个函数,该函数应该通过hyperparameters和Python 如何将枚举传递给ParameterGrid?,python,scikit-learn,python-multiprocessing,hyperparameters,Python,Scikit Learn,Python Multiprocessing,Hyperparameters,我想将几个参数传递给一个函数,该函数应该通过hyperparameters和多处理进行优化 如果Enum作为参数传递,则此操作失败。请参阅下面的代码 在这种情况下,如何传递Enum from sklearn.model_selection import ParameterGrid from multiprocessing import Pool from enum import Enum class MyStrategy(Enum): var1 = 1 var2 = 2
多处理
进行优化
如果Enum
作为参数传递,则此操作失败。请参阅下面的代码
在这种情况下,如何传递Enum
from sklearn.model_selection import ParameterGrid
from multiprocessing import Pool
from enum import Enum
class MyStrategy(Enum):
var1 = 1
var2 = 2
var1 = MyStrategy(1)
var2 = MyStrategy(2)
abc = [1, 2]
xyz = [3, 4]
if True:
pg = [{'variant': var1,
'abc': abc,
'xyz': xyz, },
{'variant': var2,
'abc': abc, }]
else:
pg = [{'variant': '1',
'abc': abc,
'xyz': xyz, },
{'variant': '2',
'abc': abc, }]
parameterGrid = ParameterGrid(pg)
def myFunc(myParam):
print(myParam)
pool = Pool(1)
myList = pool.map(myFunc, parameterGrid)
如果为False
,则该选项有效:
{'abc': 1, 'variant': '1', 'xyz': 3}
{'abc': 1, 'variant': '1', 'xyz': 4}
{'abc': 2, 'variant': '1', 'xyz': 3}
{'abc': 2, 'variant': '1', 'xyz': 4}
{'abc': 1, 'variant': '2'}
{'abc': 2, 'variant': '2'}
并在为真时失败:
TypeError: object of type 'MyStrategy' has no len()
在True
示例中,在pg
字典列表中,'variant'
键的两个值都是类型
。而在False
示例中,类型为str
要使用枚举数复制False
变量,必须更改以下内容:
class MyStrategy(枚举):
var1='1'
var2='2'
pg=[{'variant':MyStrategy('1').value,#或MyStrategy.var1.value
“abc”:abc,
“xyz”:xyz,},
{'variant':MyStrategy('2').value,#或MyStrategy.var2.value
“abc”:abc,}]
首先,您需要将枚举中的值更改为字符串,因为这与您在False
块中为variant
键使用的数据类型相同。像这样
from sklearn.model_selection import ParameterGrid
from multiprocessing import Pool
from enum import Enum
class MyStrategy(Enum):
var1 = '1' #<--------Notice the value is string not int
var2 = '2'
为什么将var1和var2定义为单独的枚举?如果您只做pg=[{'variant':MyStrategy.var1,
和{'variant':MyStrategy.var2,
谢谢您的评论,它似乎可以工作。不幸的是,我得到了一个错误TypeError:Parameter grid value不可iterable(key='variant',value=)
糟糕,我的意思是pg[{'variant':[MyStrategy.var1],..
和{'variant':[MyStrategy.var2],…
不幸的是,这也导致了错误:AttributeError:无法在
Hi上获取属性'myFunc',谢谢您的回答。不幸的是,这导致了错误:AttributeError:无法在
Hi@user7468395上获取属性'myFunc',我的解决方案使用chs复制False pg
块的行为m
。两者都MyStrategy('1')).value
返回一个字符串,因此如果您的False pg
有效,我的解决方案也应该有效…但是,似乎您正在parameterGrid
中修改pg
,我邀请您修改您的问题,包括parameterGrid
的实现代码。您还可以通过像这样访问它:MyStrategy.\uu成员\uuu
,查看文档。它只不过是一个只读的dict
!!嗨@jesteras,不,除了问题中可见的内容之外,我什么都不做……因此,我所做的全部代码在我的问题中可见。但是关于的整体解决方案是什么样子de>MyStrategy.\uuuu成员\uuuuu
您在上一次评论中提到的?
var1 = MyStrategy.var1.value
var2 = MyStrategy.var2.value