神经网络网格搜索出现ValueError:数组真值判断歧义问题求助
解决GridSearchCV搭配MLPClassifier时的ValueError问题
我一眼就看出问题出在你设置alpha参数的方式上!让我给你拆解清楚:
你的参数字典里,alpha被写成了[10.0 ** -np.arange(1, 7)]——这会生成一个包含numpy数组的嵌套列表,但GridSearchCV期望每个参数对应的候选值是一维的可迭代对象(比如直接是numpy数组或者普通Python列表),完全不需要额外套一层列表。
当GridSearchCV尝试把这个嵌套的数组作为alpha值传入MLPClassifier时,内部的参数校验逻辑会触发对数组的布尔判断,而numpy数组的布尔值是模糊的(因为它包含多个元素),这就直接导致了你看到的ValueError: The truth value of an array with more than one element is ambiguous错误。
修正后的代码
只需要把alpha的外层列表去掉,直接用numpy生成的数组即可:
import numpy as np from sklearn.neural_network import MLPClassifier from sklearn.model_selection import GridSearchCV parameters = { 'learning_rate': ["constant", "invscaling", "adaptive"], 'hidden_layer_sizes': (156,), 'alpha': 10.0 ** -np.arange(1, 7), # 去掉外层的[] 'activation': ["logistic", "relu", "Tanh"] } grid = GridSearchCV(MLPClassifier(), parameters, n_jobs=-1, cv=10) grid.fit(train_x, train_y)
额外说明
- 如果你更习惯用普通Python列表,也可以把alpha转换成列表:
alpha = (10.0 ** -np.arange(1, 7)).tolist(),效果完全一致。 - 其他参数的设置是没问题的:
hidden_layer_sizes=(156,)表示单隐藏层156个神经元,作为单一候选值符合要求;learning_rate和activation的列表格式也正确。
内容的提问来源于stack exchange,提问作者Dela
相关产品推荐
相关产品推荐

