我设置了以下参数:
parameter_space = { 'hidden_layer_sizes': [(sp_randint(100,600),sp_randint(100,600),), (sp_randint(100,600),)], 'activation': ['tanh', 'relu', 'logistic'], 'solver': ['sgd', 'adam', 'lbfgs'], 'alpha': stats.uniform(0.0001, 0.9), 'learning_rate': ['constant','adaptive']}
除了hidden_layer_sizes之外的所有参数都按预期工作。然而,拟合这个RandomizedSearchCV模型并显示其详细文本时,显示它将hidden_layer_sizes视为:
hidden_layer_sizes=(<scipy.stats._distn_infrastructure.rv_frozen object
,接着抛出错误: TypeError: '<=' not supported between instances of 'rv_frozen' and 'int'
得到的结果不是预期的1层或2层MLP,其隐藏层神经元在100到600之间。有什么想法或其他相关建议吗?
回答:
sp_randint
返回rv_discrete
类的一个实例/一个randint对象,为了生成随机数,正确的语法应该是sp_randint.rvs(low, high, size)
。为了使其工作,你需要按如下方式定义parameter_space
:
parameter_space = { 'hidden_layer_sizes': [(sp_randint.rvs(100,600,1),sp_randint.rvs(100,600,1),), (sp_randint.rvs(100,600,1),)], 'activation': ['tanh', 'relu', 'logistic'], 'solver': ['sgd', 'adam', 'lbfgs'], 'alpha': uniform(0.0001, 0.9), 'learning_rate': ['constant','adaptive']}