-
[n414] 하이퍼 파라미터 튜닝AI 부트캠프 2021. 12. 22. 10:02
교차 검증 (Cross Validation)
x_train = pd.DataFrame(x_train) y_train = pd.DataFrame(y_train) for train_index, val_index in kf.split(np.zeros(x_train.shape[0])): training_data = x_train.iloc[train_index, :] training_data_label = y_train.iloc[train_index] validation_data = x_train.iloc[val_index, :] validation_data_label = y_train.iloc[val_index] model.compile(loss='mean_squared_error', optimizer='adam') model.fit(x_train, y_train, epochs=10, batch_size=32, validation_data = (validation_data, validation_data_label), ) results = model.evaluate(x_test, y_test, batch_size=32) print("test loss, test mse:", results)
하이퍼 파라미터
Grid Search
- 그리드 서치는 탐색할 지점을 설정하면, 모든 지점에 해당하는 조합을 수행한다. 그리드 서치를 이용해서 최대 2개 정도의 파라미터 최적값을 찾는 것이 적합하다 (시간 때문).
Random Search
- 램덤 서치는 범위를 설정해주면, 그 안에서 랜덤으로 모델링을 한 뒤 그 중에서 최고 성능 모델을 반환한다. 따로 지정하지 않아도 중요한 하이퍼 파라미터에서는 탐색을 더 하고, 그렇지 않은 하이퍼 파라미터에 대해서는 덜 한다.
Bayesian Methods
- 이전 탐색 결과 정보를 새로운 탐색에 활용하는 방법이다.
대표적으로 튜닝 가능한 파라미터
- 배치 크기
- 에포크
- 옵티마이저
- 학습률
- 활성화 함수
- Regularization
- 은닉층의 노드 수
Keras Tuner
- 케라스 프레임워크에서 하이퍼 파라미터 튜닝을 위한 라이브러리 이다.
1. 필요한 패키지 import 및 설치
from tensorflow import keras from tensorflow.keras.layers import Dense, Flatten import tensorflow as tf import IPython
!pip install -U keras-tuner import kerastuner as kt
2. 데이터셋 로드 및 정규화
(X_train, y_train), (X_test, y_test) = keras.datasets.fashion_mnist.load_data() X_train = X_train.astype('float32') / 255.0 X_test = X_test.astype('float32') / 255.0
3. 모델링
def model_builder(hp): model = keras.Sequential() model.add(Flatten(input_shape=(28, 28))) # 은닉층의 노드 수가 32부터 512까지 32개씩 증가하며 탐색 hp_units = hp.Int('units', min_value = 32, max_value = 512, step = 32) model.add(Dense(units = hp_units, activation = 'relu')) model.add(Dense(10, activation='softmax')) # 학습률은 0.01, 0.001, 0.0001의 3개 지점을 탐색 hp_learning_rate = hp.Choice('learning_rate', values = [1e-2, 1e-3, 1e-4]) model.compile(optimizer = keras.optimizers.Adam(learning_rate = hp_learning_rate), loss = keras.losses.SparseCategoricalCrossentropy(from_logits = True), metrics = ['accuracy']) return model
4. 하이퍼파라미터 튜닝을 위해 튜너 지정
Random search, Bayesian optimization, Hyperband 등의 최적화 방법이 있다.
tuner = kt.Hyperband(model_builder, objective = 'val_accuracy', max_epochs = 10, factor = 3, directory = 'my_dir', project_name = 'intro_to_kt')
5. Callback 함수 지정
하이퍼 파라미터 탐색을 실행하기 전에, 학습이 끝날 때마다 이전 출력이 지워지는 콜백 함수를 정의한다.
class ClearTrainingOutput(tf.keras.callbacks.Callback): def on_train_end(*args, **kwargs): IPython.display.clear_output(wait = True)
6. 하이퍼파라미터 탐색을 수행
tuner.search(X_train, y_train, epochs = 10, validation_data = (X_test, y_test), callbacks = [ClearTrainingOutput()]) best_hps = tuner.get_best_hyperparameters(num_trials = 1)[0] print(f""" 하이퍼 파라미터 검색이 완료되었습니다. 최적화된 첫 번째 Dense 노드 수는 {best_hps.get('units')} 입니다. 최적의 학습 속도는 {best_hps.get('learning_rate')} 입니다. """)
7. 최고 성능을 나타낸 하이퍼파라미터 조합으로 다시 학습 진행
model = tuner.hypermodel.build(best_hps) model.summary()
model.fit(X_train, y_train, epochs = 10, validation_data = (img_test, label_test))
'AI 부트캠프' 카테고리의 다른 글
[n421] Count-based Representation (0) 2021.12.24 [n414] 신경망 기본 개념 요약 (0) 2021.12.22 [n413] Learning rate, 가중치 초기화, 과적합 방지 (0) 2021.12.21 [n412] 역전파, 경사하강법, 옵티마이저 (0) 2021.12.20 [n411] Neural Networks (0) 2021.12.17