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_
'딥러닝' 카테고리의 다른 글
[딥러닝] Validation 설정: validation_split, validation_data (0) | 2022.06.13 |
---|---|
[딥러닝] 옵티마이저의 learning rate 설정 (0) | 2022.06.13 |
[딥러닝] 텐서플로우 예측 ANN: loss= 'mse', activation= 'linear' (0) | 2022.06.10 |
[딥러닝] 텐서플로우 분류 ANN: loss= 'binary_crossentropy', activation= 'sigmoid', epoch, batch_size (0) | 2022.06.10 |
[딥러닝] 텐서플로우 기초 (0) | 2022.06.10 |
댓글