Как GridSearchCV использует ядра? - PullRequest
0 голосов
/ 18 февраля 2020

Я делаю GridSearchCV, я отслеживал% ядер и видел, что когда я работал на простой нейронной сети, у 4 ядер был тот же%, но когда поиск по сетке cv (n_jobs = 1 ) началось было большое замешательство в линиях сюжета. Почему? Я использую Zorin

enter image description here

Ниже вы можете найти часть кода, где я делаю gscv (но я изменил n_jobs, на рисунке выше он был использован n_jobs = 1):

def build_regressor(opti, units1,units2, units3, acti, a, kern):

    model_TP = Sequential()
    model_TP.add(Dense(units = units1, input_shape = (X_train_TP.shape[1],), activation = acti, kernel_initializer = kern))
    model_TP.add(Dropout(a))
    model_TP.add(Dense(units = units2, activation = acti, kernel_initializer = kern))
    model_TP.add(Dropout(a))
    model_TP.add(Dense(units = units3, activation = acti, kernel_initializer = kern))
    model_TP.add(Dense(1,activation = 'linear'))
    model_TP.compile(loss = 'mse', optimizer = opti, metrics = ['mse'])
    return model_TP

parameters ={'units1' : [50,100,150],
             'units2' : [50,100,150],
             'units3' : [50,100,150],
             'batch_size' : [50,100,250],
              'kern':['random_normal','glorot_uniform','random_uniform'],
              'acti':['relu','sigmoid','linear'],
              'opti':[tf.keras.optimizers.Adamax(lr=0.001),
                      tf.keras.optimizers.Adam(lr=0.001)],
              'a' : [0.2,0.25]
                          }

regressor = KerasRegressor(build_fn = build_regressor, verbose = 1)

gridSearch = GridSearchCV(estimator=regressor,
                          param_grid=parameters,
                          cv=5, n_jobs = 4
                          )

grid_result = gridSearch.fit(X_train_TP, y_train_TP)

print('Grid Search Best score',gridSearch.best_score_)
print('Grid Search Best Parameters', gridSearch.best_params_)
print('Execution time',gridSearch.refit_time_)

1 Ответ

0 голосов
/ 19 февраля 2020

Согласно документам :

n_jobs : int или None, необязательный (по умолчанию = None)

Количество заданий, запускаемых параллельно. None означает 1, если только в контексте joblib.parallel_backend. -1 означает использование всех процессоров. См. Глоссарий для получения более подробной информации.

По умолчанию вы должны находиться в параллельном контексте.

from sklearn.utils import _joblib                                                                                                                                                                  
backend = _joblib.parallel_backend(_joblib.joblib.parallel.DEFAULT_BACKEND)                                                                                                                       
backend.new_backend_and_jobs                                                                                                                                                                      
>>> (<joblib._parallel_backends.LokyBackend at 0x7f984f580dd8>, -1)

Следовательно, по умолчанию используется идентификатор n_jobs -1, поэтому GridSearchCV использует все ваши процессоры, когда не передается n_jobs.

...