일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 얼음여왕
- 구글애널리틱스4
- 수명예측 인공지능
- 니다
- 독서
- GA4
- 데이터 분석
- 벚꽃개화시기
- 코딩
- Google Analytics
- ㅂㅂ
- 프로그래머스
- 6시 기상
- 기사스크랩
- 채용공고
- 구글애널리틱스
- 벚꽃
- 코오롱베네트
- 미라클 모닝
- 티스토리
- 영화 올드 줄거리
- 감사인사
- 알파줄거리
- 데이터문해력
- Python
- GA
- 명상
Archives
- Today
- Total
Data Analyst KIM
[Deep Learning] 전이 학습(transfer learning) : 치매 환자 분류하기 본문
반응형
전이 학습(transfer learning)이란?
- 여러 방법 중에서 수 만장에 달하는 기존의 이미지에서학습한 정보를 가져와 내 프로젝트에 활용하는것
전이 학습 방법
- 먼저 대규모 데이터 셋에서 학습된 기존의신경망을 불러옴
- CNN 모델의 앞쪽을 이 신경망으로채움
- 뒤쪽 층에서 나의 프로젝트와연결함
- 이 두 신경망이잘 맞물리게끔미세 조정(Fine tuning)을하면 됨
전이 학습 사용하는 이유
- 데이터 셋 부족의 해결
- 비용 절감
- 학습에 필요한 인력 감소
전이 학습 : 치매 환자 분류하기
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras import Input, models, layers, optimizers, metrics
from tensorflow.keras.layers import Dense, Flatten, Activation, Dropout
from tensorflow.keras.applications import VGG16
from tensorflow.keras.callbacks import EarlyStopping
import numpy as np
import matplotlib.pyplot as plt
# 학습셋의 변형을 설정하는 부분입니다.
train_datagen = ImageDataGenerator(rescale=1./255, # 주어진 이미지의 크기를 설정합니다.
horizontal_flip=True, # 수평 대칭 이미지를 50% 확률로 만들어 추가합니다.
width_shift_range=0.1, # 전체 크기의 15% 범위에서 좌우로 이동합니다.
height_shift_range=0.1, # 마찬가지로 위, 아래로 이동합니다.
#rotation_range=5, # 정해진 각도만큼 회전시킵니다.
#shear_range=0.7, # 좌표 하나를 고정시키고 나머지를 이동시킵니다.
#zoom_range=1.2, # 확대 또는 축소시킵니다.
#vertical_flip=True, # 수직 대칭 이미지를 만듭니다.
#fill_mode='nearest' # 빈 공간을 채우는 방법입니다. nearest 옵션은 가장 비슷한 색으로 채우게 됩니다.
)
train_generator = train_datagen.flow_from_directory(
'./data-ch20/train',
target_size=(150, 150),
batch_size=5,
class_mode='binary')
# 테스트셋의 정규화를 설정합니다.
test_datagen = ImageDataGenerator(rescale=1./255)
test_generator = test_datagen.flow_from_directory(
'./data-ch20/test',
target_size=(150, 150),
batch_size=5,
class_mode='binary')
# VGG16 모델을 불러옵니다.
transfer_model = VGG16(weights='imagenet', include_top=False, input_shape=(150, 150, 3))
transfer_model.trainable = False
transfer_model.summary()
# 우리의 모델을 설정합니다.
finetune_model = models.Sequential()
finetune_model.add(transfer_model)
finetune_model.add(Flatten())
finetune_model.add(Dense(64))
finetune_model.add(Activation('relu'))
finetune_model.add(Dropout(0.5))
finetune_model.add(Dense(1))
finetune_model.add(Activation('sigmoid'))
finetune_model.summary()
# 모델의 실행 옵션을 설정합니다.
finetune_model.compile(loss='binary_crossentropy', optimizer=optimizers.Adam(learning_rate=0.0002), metrics=['accuracy'])
# 학습의 조기 중단을 설정합니다.
early_stopping_callback = EarlyStopping(monitor='val_loss', patience=5)
# 모델을 실행합니다.
history = finetune_model.fit(
train_generator,
epochs=20,
validation_data=test_generator,
validation_steps=10,
callbacks=[early_stopping_callback])
# 검증셋과 학습셋의 오차를 저장합니다.
y_vloss = history.history['val_loss']
y_loss = history.history['loss']
# 그래프로 표현해 봅니다.
x_len = np.arange(len(y_loss))
plt.plot(x_len, y_vloss, marker='.', c="red", label='Testset_loss')
plt.plot(x_len, y_loss, marker='.', c="blue", label='Trainset_loss')
# 그래프에 그리드를 주고 레이블을 표시하겠습니다.
plt.legend(loc='upper right')
plt.grid()
plt.xlabel('epoch')
plt.ylabel('loss')
plt.show()
이미지 증강 방법과 전이 학습의 성능 비교
반응형
'데이터 분석 > ML&DL&NLP' 카테고리의 다른 글
[DL/NLP] 문서 분류 모델 만들기(영화 리뷰 감성 분석) (0) | 2023.11.06 |
---|---|
[ML] Kaggle_뇌졸중 데이터를 활용한 분류모델 만들기(불균형데이터,SMOTE) (0) | 2023.11.03 |
[Deep Learning] 이미지 증강 : MRI 뇌 사진을 통한 치매 환자 예측 (0) | 2023.10.27 |
[Deep Learning] 오토인코더(Auto-Encoder)란 무엇인가? (0) | 2023.10.26 |
[Deep Learning] GAN이란 무엇인가? (0) | 2023.10.26 |