Как настроить параметр_пространство с помощью GridSearch?

См. пример ниже:

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) --- Hiddenlayer 1 (200) --- Hiddenlayer2 (100) --- OutputLayer (1)

Я знаю, что в "hidden_layer_sizes" будут вставлены только скрытые слои, но как мы укажем входной и выходной слои? И как «GridSearchCV» будет чередовать количество нейронов в скрытых слоях, чтобы найти наилучшую конфигурацию?


person Ramses Coraspe Valdez    schedule 26.11.2019    source источник


Ответы (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 не нужны эти размеры слоя. Жаль, что другие инструменты машинного обучения не делают того же!

person jeremy_rutman    schedule 03.12.2019