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로 바꿔준다.
후에 하던데로.... 컴파일하고, 훈련을 시켜준다. 그리고 성능에 변화가 있는지 본다!
'IT 프로그래밍 관련 > 딥러닝' 카테고리의 다른 글
epoch마다 기록을 남기는 CSVLogger (0) | 2021.03.04 |
---|---|
epoch마다 가장 좋은 모델을 저장하는 ModelCheckpoint (0) | 2021.03.04 |
Transfer Learning을 위한 코드와 설명 (0) | 2021.03.04 |
CNN으로 이미지 파일 시험코드 (0) | 2021.03.03 |
타임시리즈 데이터분석용 Prophet 라이브러리 (0) | 2021.03.03 |
댓글