일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 순환 신경망
- 이미지 분류
- RNN
- 코랩
- 임베딩
- 성능 최적화
- 클러스터링
- 전이학습
- 합성곱 신경망
- KONLPY
- 자연어 전처리
- 풀링층
- 완전연결층
- COLAB
- 입력층
- 망각 게이트
- 출력층
- 생성모델
- cnn
- 프로그래머스
- 코딩테스트
- 텍스트 마이닝
- 시계열 분석
- 딥러닝
- 합성곱층
- NLTK
- 카운트 벡터
- 원-핫 인코딩
- 과적합
- 양방향 RNN
Archives
- Today
- Total
Colab으로 하루에 하나씩 딥러닝
생성모델_1.오토인코더 본문
728x90
오토인코더(Autoencoder)
- 단순히 입력을 출력으로 복사하는 신경망
- 은닉층의 노드 개수가 입력 값보다 적음
- 병목층은 입력과 출력의 뉴런보다 훨씬 적음
오토인코더 구성요소
1. 인코더
- 인지 네트워크(recognition network)
- 특성에 대한 학습을 수행하는 부분
2. 병목층(은닉층)
- 모델의 뉴런 개수가 최소인 계층
- 이 계층에서는 차원이 가장 낮은 입력 데이터의 압축 표현이 포함됨
3. 디코더
- 생성 네트워크(generative network)
- 병목층에서 압축된 데이터를 원래대로 재구성(reconstruction)하는 역할
- 최대한 입력에 가까운 출력을 생성
4. 손실 재구성
- 오토인코더는 압축된 입력을 출력층에서 재구성
- 손실 함수는 입력과 출력의 차이를 가지고 계산
오토인코더 중요한 특징
1. 데이터 압축
- 메모리 측면에서 상장한 장점
- 중요 특성만 압축하면 용량도 적고 품질도 더 좋아짐
2. 차원의 저주 예방
- 특성 개수를 줄여 주기 때문에 데이터 차원이 감소
3. 특성 추출
- 오토인코더는 비지도 학습으로 자동으로 중요한 특성을 찾아줌
오토인코더 실습
### 라이브러리 호출
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
### 네트워크(신경망 생성)
input_image = tf.keras.layers.Input(shape=(784,))
encoded_input = tf.keras.layers.Dense(32, activation='relu')(input_image)
decoded_output = tf.keras.layers.Dense(784, activation='sigmoid')(encoded_input)
autoencoder = tf.keras.models.Model(input_image, decoded_output)
상세 설명
- 입력의 크기(784,)
- 입력을 인코딩에 적용
- 인코딩 출력을 디코딩에 적용하여 재구성 / 입력의 원래 크기로 변환
- 인코더와 디코더로 구성된 오토인코더 모델 생성
### 모델 컴파일
autoencoder.compile(optimizer='adam', loss='binary_crossentropy')
### 데이터셋 준비
(X_train, _), (X_test, _) = tf.keras.datasets.mnist.load_data()
X_train = X_train.astype('float32') / 255
X_test = X_test.astype('float32') / 255
X_train = X_train.reshape((len(X_train), np.prod(X_train.shape[1:])))
X_test = X_test.reshape((len(X_test), np.prod(X_test.shape[1:])))
### 모델 훈련
autoencoder.fit(
X_train,
X_train,
epochs=30,
batch_size=256,
shuffle=True,
validation_data=(X_test, X_test)
)
### 이미지 시각화
reconstructed_img = autoencoder.predict(X_test)
n = 10
plt.figure(figsize=(20,4))
for i in range(n):
ax = plt.subplot(2, n , i+1)
plt.imshow(X_test[i].reshape(28,28))
plt.gray()
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)
ax = plt.subplot(2, n, i+1+n)
plt.imshow(reconstructed_img[i].reshape(28,28))
plt.gray()
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)
plt.show()
참고: 서지영, 『딥러닝 텐서플로 교과서』, 길벗(2022)
'딥러닝_개념' 카테고리의 다른 글
생성모델_3.GAN (1) | 2023.02.07 |
---|---|
생성모델_2.변형 오토인코더 (0) | 2023.02.06 |
클러스터링_3.자기 조직화 지도 (0) | 2023.01.31 |
클러스터링_2.가우시안 혼합 모델 (0) | 2023.01.30 |
클러스터링_1.K-평균 군집화 (0) | 2023.01.27 |