请参见以下示例:
parameter_space = {
'hidden_layer_sizes': [(200,100)],
'activation': ['tanh', 'relu'],
'solver': ['sgd', 'adam'],
'alpha': [0.0001, 0.05],
'learning_rate': ['constant','adaptive'],
}
clf = GridSearchCV(mlp, parameter_space, n_jobs=-1, cv=3)
问题是要了解我的人工神经网络在内部如何停留。
我希望本示例对输入层使用20个神经元,对200个和100个神经元使用两个隐藏层,对1个神经元使用一个输出层,因为我的问题是二进制分类。
InputLayer(20)---隐藏层1(200)--- Hiddenlayer2(100)--- OutputLayer(1)
我知道在“ hidden_layer_sizes”中仅会插入隐藏层,但是我们如何指示输入和输出层呢?以及“ GridSearchCV”将如何交替隐藏层中的神经元数量以找到最佳配置?
答案 0 :(得分:1)
设置一个配置列表以尝试进行操作,然后调用gridsearch传递对MLP函数的引用(带有括号,mlp()
):
from sklearn import svm
from sklearn.model_selection import GridSearchCV
from sklearn.neural_network import MLPClassifier as mlp
parameter_space = {
'hidden_layer_sizes': [(200, 100),(100, 200),(200, 200),(100, 100)],
'activation': ['tanh', 'relu'],
'solver': ['sgd', 'adam'],
'alpha': [0.0001, 0.05],
'learning_rate': ['constant','adaptive']
}
clf = GridSearchCV(mlp(), parameter_space, scoring='precision_macro')
print("Best params:")
print(clf.best_params_)
这将遍历所有(4 * 2 * 2 * 2 * 2)= 64个可能的参数组合。隐藏层的大小可以是(200,100)或(100,200),也可以是列表中其他两个的其中之一-如果您想要更多或更少的细粒度变化,则可以修改该列表。
关于输入和输出层大小的问题是一个很好的问题,我也想知道从什么开始。答案是输入向量的大小已经确定了输入层的大小(必须相同),输出层和输出向量也是如此,因此scikit不需要这些层大小。不幸的是,其他ML工具包却无法做到这一点!