[파이썬] TensorFlow에서 하이퍼파라미터 튜닝

하이퍼파라미터 튜닝은 딥러닝 모델을 최적화하기 위해 매우 중요한 단계입니다. 하이퍼파라미터는 모델의 구조, 학습 알고리즘 및 학습 속도와 같은 다양한 측면을 조정하는데 사용됩니다. TensorFlow에서 하이퍼파라미터 튜닝을 수행하는 방법을 알아보겠습니다.

1. Grid Search를 사용한 하이퍼파라미터 튜닝

Grid Search는 가장 기본적인 하이퍼파라미터 튜닝 방법 중 하나입니다. 이 방법은 사전에 정의된 여러 하이퍼파라미터의 조합을 시도하고, 이들 조합에 대해 성능을 평가하여 최적의 조합을 찾는 방식입니다.

from sklearn.model_selection import GridSearchCV
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.wrappers.scikit_learn import KerasClassifier

# 모델을 생성하는 함수 정의
def create_model(hidden_units=100, activation='relu'):
    model = Sequential()
    model.add(Dense(hidden_units, input_dim=10, activation=activation))
    model.add(Dense(1, activation='sigmoid'))
    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
    return model

# 하이퍼파라미터 그리드 정의
param_grid = {'hidden_units': [50, 100, 200],
              'activation': ['relu', 'sigmoid']}

# Grid Search를 통해 최적의 하이퍼파라미터 조합 찾기
model = KerasClassifier(build_fn=create_model, verbose=0)
grid = GridSearchCV(estimator=model, param_grid=param_grid, cv=3)
grid_result = grid.fit(X_train, y_train)

# 최적의 하이퍼파라미터 조합과 성능 출력
print("Best: %f using %s" % (grid_result.best_score_, grid_result.best_params_))

위의 예제 코드에서는 hidden_unitsactivation 두 가지 하이퍼파라미터를 조정하며, GridSearchCV 객체를 사용하여 Grid Search를 수행합니다. 최적의 하이퍼파라미터 조합과 그에 따른 성능이 출력됩니다.

2. Random Search를 사용한 하이퍼파라미터 튜닝

Random Search는 Grid Search와는 달리 사전에 정의된 하이퍼파라미터 그리드 대신, 랜덤하게 선택된 하이퍼파라미터 값을 시도하여 성능을 평가하는 방식입니다. 이 방법은 대규모 하이퍼파라미터 공간을 효과적으로 탐색하는 데에 유용합니다.

from sklearn.model_selection import RandomizedSearchCV
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.wrappers.scikit_learn import KerasClassifier
import random

# 모델을 생성하는 함수 정의
def create_model(hidden_units=100, activation='relu'):
    model = Sequential()
    model.add(Dense(hidden_units, input_dim=10, activation=activation))
    model.add(Dense(1, activation='sigmoid'))
    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
    return model

# 하이퍼파라미터 탐색 범위 정의
param_dist = {'hidden_units': [50, 100, 200],
              'activation': ['relu', 'sigmoid']}

# Random Search를 통해 최적의 하이퍼파라미터 조합 찾기
model = KerasClassifier(build_fn=create_model, verbose=0, epochs=10)
random_search = RandomizedSearchCV(estimator=model, param_distributions=param_dist, n_iter=10, cv=3)
random_search_result = random_search.fit(X_train, y_train)

# 최적의 하이퍼파라미터 조합과 성능 출력
print("Best: %f using %s" % (random_search_result.best_score_, random_search_result.best_params_))

위의 예제 코드에서는 hidden_unitsactivation 두 가지 하이퍼파라미터를 조정하며, RandomizedSearchCV 객체를 사용하여 Random Search를 수행합니다. 최적의 하이퍼파라미터 조합과 그에 따른 성능이 출력됩니다.

하이퍼파라미터 튜닝은 모델의 성능을 향상시키기 위해 반드시 수행되어야 하는 중요한 단계입니다. TensorFlow의 Grid Search와 Random Search를 활용하여 최적의 하이퍼파라미터 조합을 찾아 모델의 성능을 향상시킬 수 있습니다. 이를 통해 더 나은 딥러닝 모델을 만들어낼 수 있습니다.