본문 바로가기
IT 프로그래밍 관련/딥러닝

Fine Tuning 코드 진행

by 지나는행인 2021. 3. 4.
728x90

Fine Tuning은 트랜스퍼러닝을 한 후에 조금 더 성능을 향상 시키고자 할 때 한다.

 

기존 모델을 실시한 후에 실시하는것이 핵심!

 

basemodel 전체를 훈련시키는 것이 아닌 앞부분은 놔두고, 뒷부분을 설정해서 설정한 구간부터 끝까지

 

훈련을 실행한다.

 

len( baseModel.layers )

start_layer = 120

baseModel.trainable=True

for layer in baseModel.layers[ 0:start_layer ] :
  layer.trainable = False


model.compile(optimizer=Adam( lr=0.0001 ), loss='categorical_crossentropy', metrics='accuracy')

model.fit(trainGen.flow(X_train, y_train, batch_size=64),
                    steps_per_epoch = len(X_train) // 64,
                    validation_data = (X_val, y_val),
                    validation_steps = len(X_val) // 64,
                    callbacks = [cp, csv_logger],
                    epochs = 50)

basemodel의 레이어 수를 한번 보자.

화면에는 없지만, 154개다.

이중에 120번째부터 훈련시키고 싶어, start_layer 변수에 120을 저장한다.

 

그리고 basemodel도 훈련을 할 수 있게끔 trainable=True로 한다.

 

하지만 이렇게 하면 basemodel 전체를 훈련하기 때문에.

for문을 이용하여 앞부분은 False로 바꿔준다.

 

후에 하던데로.... 컴파일하고, 훈련을 시켜준다. 그리고 성능에 변화가 있는지 본다!

댓글