gpt4 book ai didi

python - 如何将枚举传递给 ParameterGrid?

转载 作者:行者123 更新时间:2023-12-01 07:32:21 27 4
gpt4 key购买 nike

我想将多个参数传递给应通过超参数和多处理进行优化的函数。

如果将 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'}

并失败并显示True:

TypeError: object of type 'MyStrategy' has no len()

最佳答案

首先,您需要将枚举中的值更改为字符串,因为这与您在 False block 中用于 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 = MyStrategy.var1.value
var2 = MyStrategy.var2.value

关于python - 如何将枚举传递给 ParameterGrid?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57156122/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com