관리 메뉴

ComputerVision Jack

[골빈해커 Chapter8 정리] 본문

DeepLearning/골빈해커 - Tensor Lib

[골빈해커 Chapter8 정리]

JackYoon 2020. 1. 19. 15:20
반응형

[개념 정리]

08_대표적 비지도 학습법Autoencoder.ipynb
0.03MB

비지도 학습 AutoEncoder

입력값으로부터 데이터의 특징을 찾아내는 방법

비지도 학습은 X값만 있는 상황에서 학습한다.

(대표적으로 Auto Encoder가 있다.)

 

오토인코더(AutoEncoder)

입력값과 출력값을 같게 하는 신경망.

가운대 계층의 노드 수가 입력값 보다 적은 것이 특이사항.

따라서 데이터 압축 효과와 잡음제거 효과까지 적용 가능하다.

 

입력층으로 데이터가 들어오면 인코더를 통해 은닉층으로 보내고, 은닉층 데이터를 디코더를 통해 출력층으로 보낸 뒤,

출력과 입력이 비슷해지도록 가중치를 찾아내는 것.

  • 오토 인코더(Variational AutoEncoder)
  • 잡음 제거 인코더(Denoising AutoEncoder)

[코드 정리]

from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets("./mnist/data/", one_hot = True)

#tensorflow에 있는 mnist자료를 다운받는다.

 

 Hyper parameter 정리

learning_rate = 0.01

training_epoch = 20

batch_size = 100

n_hidden = 256

n_input = 28 * 28

 

X = tf.placeholder(tf.float32, [None, n_input])

#비지도 학습은 Y값 라벨이 필요가 없다.

 

인코더 생성

W_encode = tf.Variable(tf.random_normal([n_input, n_hidden]))

b_encode = tf.Variable(tf.random_normal([n_hidden]))

 

encoder = tf.nn.sigmoid(tf.add(tf.matmul(X, W_encode), b_encode))

#우선 256개의 뉴런을 가진 은닉층 생성.

따라서 입력 784 은닉층 256이기 때문에 [784, 256]의 가중치와 [256] 편향을 설정한다.

마지막으로 sigmoid함수를 통하여 인코더 결과를 도출한다.

input 보다 hidden값이 더 작다는 것에 주목.

 

디코더 생성

W_decode = tf.Variable(tf.random_normal([n_hidden, n_input]))

b_decode = tf.Variable(tf.random_normal([n_input]))

 

decoder = tf.nn.sigmoid(tf.add(tf.matmul(encoder, W_decode), b_decode))

#디코더 구성 - 입력값 은닉층 출력값 입력층 크기 만큼 생성.

 

따라서 최종 모델은 [784 -> 256 -> 784]가 된다.

오토인코더는 출력값을 입력값과 비슷하게 만드는 것. 

따라서 실제 값 X와 디코더로 보내지 값의 거리 오차를 구한다.

 

cost = tf.reduce_mean(tf.pow(X - decoder, 2))

#손실함수

 

optimizer = tf.train.RMSPropOptimizer(learning_rate).minimize(cost)

#RMSProp optimizer를 사용한다.

 

total_batch = int(mnist.train.num_examples / batch_size)

for epoch in range(training_epoch):

  total_cost = 0

 

  for i in range(total_batch):

    batch_xs, batch_ys = mnist.train.next_batch(batch_size)

    _,cost_val = sess.run([optimizer, cost], feed_dict = {X: batch_xs})

    total_cost += cost_val

 

  print('Epoch : ', '%04d' % (epoch + 1),'Avg. cost : ', '{:.4f}'.format(total_cost / total_batch))

print('---최적화 완료---')

#학습을 시킨다.

 

maplotlib라이브러리를 사용하여 x_data를 넣었을때 x_data 비슷하게 y를 생성했는지 확인

반응형

'DeepLearning > 골빈해커 - Tensor Lib' 카테고리의 다른 글

[골빈해커 Chapter10정리]  (0) 2020.01.21
[골빈해커 Chapter9정리]  (0) 2020.01.20
[골빈해커 Chapter7정리]  (0) 2020.01.17
[골빈해커 Chapter6 정리]  (0) 2020.01.16
[골빈해커 Chapter5 정리]  (0) 2020.01.15
Comments