본문 바로가기
machine learning

[골빈해커의 3분 딥러닝] 04_02_DeepNN

by 유주원 2019. 6. 5.

2019/06/04 - [machine learning] - [골빈해커의 3분 딥러닝] 04_01_classification

 

[골빈해커의 3분 딥러닝] 04_01_classification

골빈 해커님이 쓰신 3분 딥러닝을 코드 위주로 설명한 포스팅. 4장 01에서는 2개의 특징 데이터(털, 날개)를 가지고 [기타, 포유류, 조류]를 분류하는 모델을 설명하고 있으며, 전체 코드는 아래와 같다. step by..

yujuwon.tistory.com

 

이전 포스팅에 이어 이번에는 layer를 2개를 만들어서 (Deep) 모델을 구현한 예제를 살펴보자.

이전 포스팅과의 차이라면 layer 개수와 loss 함수를 tf에서 제공하는 함수를 썼다는 정도이다.

전체 코드는 아래와 같다.

 

이전 포스팅과 차이점만 살펴보자.

W1 = tf.Variable(tf.random_uniform([2, 10], -1., 1.))
W2 = tf.Variable(tf.random_uniform([10, 3], -1., 1.))
b1 = tf.Variable(tf.zeros([10]))
b2 = tf.Variable(tf.zeros([3]))

이전 포스팅과 다르게 이번에는 weight1,2, bias1,2를 각각 선언하였다.

 

L1 = tf.add(tf.matmul(X, W1), b1)
L1 = tf.nn.relu(L1)
model = tf.add(tf.matmul(L1, W2), b2)

그리고 layer도 2개로 만들었다. [1x2]의 인풋이 들어오면 w1,b1과 계산하는 layer1, layer1의 output과 w2,b2와 계산하는 layer2.. 이렇게 두 개의 layer가 존재하게 된다.

ex) 1번 layer : [1x2] * [2*10] + [1x10] = [1x10]

      2번 layer : [1x10] * [10x3] + [1x3] = [1x3]

 

cost = tf.reduce_mean( tf.nn.softmax_cross_entropy_with_logits_v2(labels=Y, logits=model))

이전에는 cross_entropy 계산하는 로직을 직접 구현하였는데, 이번에는 tf에 존재하는 함수를 사용해서 loss를 구하고 있다. 주의할 점은 softmax까지 한꺼번에 계산해주기 때문에 softmax가 적용된 normalize된 출력값을 logit에 넣어주면 안된다. softmax가 적용되기 전의 logit값을 넣어주어야 한다.

 

optimizer = tf.train.AdamOptimizer(learning_rate=0.01)

이전 포스팅에서는 gragient decent optimizer를 사용했는데, 이번에는 adamoptimizer를 사용하고 있다.

 

나머지 예측을 위한 코드는 이전 포스팅과 동일하며, 결과 정확도는 약 83%를 나타낸다.

이전 33%에 비하면 정말 놀라운 성능 향상이라고 할 수 있겠다.