일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Google Analytics
- 프로그래머스
- 기사스크랩
- 코오롱베네트
- 영화 올드 줄거리
- GA4
- 티스토리
- 구글애널리틱스4
- 독서
- 채용공고
- 6시 기상
- 니다
- 구글애널리틱스
- 알파줄거리
- ㅂㅂ
- 벚꽃개화시기
- 감사인사
- 수명예측 인공지능
- Python
- 명상
- 데이터문해력
- 데이터 분석
- 얼음여왕
- GA
- 미라클 모닝
- 코딩
- 벚꽃
Archives
- Today
- Total
Data Analyst KIM
[Deep Learning] 오토인코더(Auto-Encoder)란 무엇인가? 본문
반응형
오토인코더(Auto-Encoder, AE)란?
- 가상의 이미지를 만드는, 또 하나의 알고리즘
- GAN과 비슷하지만 다른 성질을 지니고 있음
- GAN : 세상에 존재하지 않는 완전한 가상의 것을 만듬
- 오토인코더 : 입력 데이터의 특징을 효율적으로 담아낸 이미지를 생성
- 오토인코더 활용 : 영상 의학 분야 등 데이터 수가 충분하지 못한 분야
오토인코더의 학습 과정
- 소실된 데이터를 복원하기 위해 학습을 시작하고,
- 입력 데이터의 특징을 효율적으로 응축한 새로운 출력이 나오는 원리
- 인코더 : 차원 축소
- 디코더 : 이미지 생성 모델
- 비지도 학습 : 손실 함수 - rmse 사용
- 지도 학습 : 손실 함수 - 크로스 엔트로피
오토인코더 모델 구현
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential, Model
from tensorflow.keras.layers import Input, Dense, Conv2D, MaxPooling2D, UpSampling2D, Flatten, Reshape
import matplotlib.pyplot as plt
import numpy as np
# MNIST 데이터셋을 불러옵니다.
(X_train, _), (X_test, _) = mnist.load_data()
X_train = X_train.reshape(X_train.shape[0], 28, 28, 1).astype('float32') / 255
X_test = X_test.reshape(X_test.shape[0], 28, 28, 1).astype('float32') / 255
# 생성자 모델
autoencoder = Sequential()
# 인코딩
autoencoder.add(Conv2D(16, kernel_size=3, padding='same', input_shape=(28,28,1), activation='relu'))
autoencoder.add(MaxPooling2D(pool_size=2, padding='same'))
autoencoder.add(Conv2D(8, kernel_size=3, activation='relu', padding='same'))
autoencoder.add(MaxPooling2D(pool_size=2, padding='same'))
autoencoder.add(Conv2D(8, kernel_size=3, strides=2, padding='same', activation='relu'))
# 디코딩
autoencoder.add(Conv2D(8, kernel_size=3, padding='same', activation='relu'))
autoencoder.add(UpSampling2D())
autoencoder.add(Conv2D(8, kernel_size=3, padding='same', activation='relu'))
autoencoder.add(UpSampling2D())
autoencoder.add(Conv2D(16, kernel_size=3, activation='relu'))
autoencoder.add(UpSampling2D())
autoencoder.add(Conv2D(1, kernel_size=3, padding='same', activation='sigmoid'))
# 전체 구조를 확인
autoencoder.summary()
# 컴파일 및 학습을 하는 부분입니다.
autoencoder.compile(optimizer='adam', loss='binary_crossentropy')
autoencoder.fit(X_train, X_train, epochs=50, batch_size=128, validation_data=(X_test, X_test))
# 학습된 결과를 출력하는 부분입니다.
random_test = np.random.randint(X_test.shape[0], size=5) # 테스트할 이미지를 랜덤하게 불러옵니다.
ae_imgs = autoencoder.predict(X_test) # 앞서 만든 오토인코더 모델에 집어 넣습니다.
plt.figure(figsize=(7, 2)) # 출력될 이미지의 크기를 정합니다.
for i, image_idx in enumerate(random_test): # 랜덤하게 뽑은 이미지를 차례로 나열합니다.
ax = plt.subplot(2, 7, i + 1)
plt.imshow(X_test[image_idx].reshape(28, 28)) # 테스트할 이미지를 먼저 그대로 보여줍니다.
ax.axis('off')
ax = plt.subplot(2, 7, 7 + i +1)
plt.imshow(ae_imgs[image_idx].reshape(28, 28)) # 오토인코딩 결과를 다음열에 출력합니다.
ax.axis('off')
plt.show()
반응형
'데이터 분석 > ML&DL&NLP' 카테고리의 다른 글
[Deep Learning] 전이 학습(transfer learning) : 치매 환자 분류하기 (0) | 2023.10.27 |
---|---|
[Deep Learning] 이미지 증강 : MRI 뇌 사진을 통한 치매 환자 예측 (0) | 2023.10.27 |
[Deep Learning] GAN이란 무엇인가? (0) | 2023.10.26 |
[Deep Learning] Attention을 사용한 신경망 (0) | 2023.10.26 |
[Deep Learning] RNN,LSTM의 개념 및 로이터 뉴스 카테고리 분류하기 (0) | 2023.10.26 |