본문 바로가기
딥러닝

[딥러닝] GridSearch, 최적의 하이퍼 파라미터 찾기

by eyoo 2022. 6. 10.

ANN을 구성하기전 어떤 하이퍼 파라미터를 사용해야 최적의 ANN이 만들어지는 알수없다.

 

그렇지만 GridSearchCV를 통해 이를 찾을수 있다.

 

먼저 GridSearchCV를 임포트 하자
 
from sklearn.model_selection import GridSearchCV

 

 

이제 ANN 모델링을 함수로 만든다.

 

def build_classifier(optimizer) :
    model = Sequential()
    model.add(Dense(units = 6, activation = 'relu', input_shape = (11,)))
    model.add(Dense(units = 8, activation= 'relu'))
    model.add(Dense(units = 1, activation = 'sigmoid'))
    model.compile(optimizer = optimizer, loss = 'binary_crossentropy', metrics = ['accuracy'])
    return model

 

 

분류하는 모델이기에 KerasClassifier를 사용한다.

 

model = KerasClassifier(build_fn= build_classifier)

# build_fn 파라미터에 위의 함수를 입력한다.

 

 

비교하고싶은 파라미터를 딕셔너리 형태로 저장한다.

 

my_parameters = {'epochs': [30,50],'batch_size':[10,20],'optimizer':['adam','rmsprop']}

# 에포크, 배치 사이즈, 옵티마이저를 비교한다.

 

 

이제 적정 하이퍼 파라미터를 찾을수 있는 GridSearchCV를 설정한다.

 

grid_search = GridSearchCV(estimator = model, param_grid = my_parameters, scoring = 'accuracy')

 

# estimator 파라미터에 설정한 모델을 입력한다.

# param_grid에 앞서 찾고싶은 파라미터들을 저장한 변수를  입력한다.

# scoring으로 좋은 파라미터를 고르는 기준을 정한다.

 

 

이제 X_train과 y_train을 grid_search에 적용하여 fit으로 찾는다.

 

in:

grid_search.fit(X_train, y_train)

out:

640/640 [==============================] - 1s 1ms/step - loss: 0.5843 - accuracy: 0.6941
Epoch 2/30
640/640 [==============================] - 1s 1ms/step - loss: 0.4496 - accuracy: 0.7983
Epoch 3/30
...

# 이 과정은 굉장히 오래 걸린다.

 

 

grid_search.best_params_로 최적의 하이퍼 파라미터를 볼수있다.
 

in:

grid_search.best_params_

out:

{'batch_size': 20, 'epochs': 30, 'optimizer': 'adam'}

 

 

grid_search.best_score_로 최적의 파라미터를 사용했을때 나오는 결과를 볼수있다.
 

in:

grid_search.best_score_

out:

0.860125

# accuracy로 정했기 때문에 최고정확도는 86%다.

 

 

grid_search.best_estimator_로 최적의 파라미터가 사용된 모델을 불러온다.
 
grid_search.best_estimator_

 

 

 

 

 

댓글