0

请参见下面的示例:

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)

问题是要了解我的 ANN 是如何留在内部的。

我希望这个例子使用 20 个神经元作为输入层,两个隐藏层 200 和 100 个神经元,一个输出层有 1 个神经元,因为我的问题是二元分类。

输入层 (20) --- 隐藏层 1 (200) --- 隐藏层 2 (100) --- 输出层 (1)

我知道在“hidden_​​layer_sizes”中只会插入隐藏层,但是我们如何指示输入和输出层呢?以及“GridSearchCV”如何交替隐藏层中的神经元数量以找到最佳配置?

4

1 回答 1

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 工具包没有做同样的事情!

于 2019-12-03T16:07:57.143 回答