IT 프로그래밍 관련/딥러닝
Fine Tuning 코드 진행
지나는행인
2021. 3. 4. 20:46
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로 바꿔준다.
후에 하던데로.... 컴파일하고, 훈련을 시켜준다. 그리고 성능에 변화가 있는지 본다!