Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将枚举传递给ParameterGrid?_Python_Scikit Learn_Python Multiprocessing_Hyperparameters - Fatal编程技术网

Python 如何将枚举传递给ParameterGrid?

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

我想将几个参数传递给一个函数,该函数应该通过hyperparameters和
多处理
进行优化

如果
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