인공신경망 (Artificial Neural Networks
import tensorflow as tf
## MNIST 데이터 다운
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("/AI/tmp/data", one_hot=True) ## 원핫코딩
## 학습을 위한 설정값 정의
learning_rate = 0.001
num_epochs = 30
batch_size = 256
display_step = 1
input_size = 784
hidden1_size = 256
hidden2_size = 256
output_size = 10
## 입력값과 출력값ㅇ르 받기 위한 플레이스 홀더 정의
x = tf.placeholder(tf.float32, shape=[None, input_size])
y = tf.placeholder(tf.float32, shape=[None, output_size])
## ANN 새로운 모델 정의
def build_ANN(x) :
W1 = tf.Variable(tf.random_normal(shape=[input_size, hidden1_size]))
b1 = tf.Variable(tf.random_normal(shape=[hidden1_size]))
H1_output = tf.nn.relu(tf.matmul(x, W1) + b1)
W2 = tf.Variable(tf.random_normal(shape=[hidden1_size, hidden2_size]))
b2 = tf.Variable(tf.random_normal(shape=[hidden2_size]))
H2_output = tf.nn.relu(tf.matmul(H1_output, W2) + b2)
W_output = tf.Variable(tf.random_normal(shape=[hidden2_size, output_size]))
b_output = tf.Variable(tf.random_normal(shape=[output_size]))
logits = tf.matmul(H2_output, W_output) + b_output
return logits
## ANN 모델을 선언
predicted_value = build_ANN(x)
# 손실 함수와 옵티마이저 정의
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=predicted_value,
labels=y))
train_step = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(loss)
## 세션을 열고 그래프 실행
with tf.Session() as sess :
# 변수들에 초기값 할당
sess.run(tf.global_variables_initializer())
## 지정된 횟수만큼 최적화 수행
for epoch in range(num_epochs) :
average_loss = 0.
# 전체배치를 불러옴
total_batch = int(mnist.train.num_examples/batch_size)
# 모든 배치들에 대해 최적화 수행
for i in range(total_batch) :
batch_x, batch_y = mnist.train.next_batch(batch_size)
# 옵티마이저를 실행해서 파라미터들을 업데이터
_, current_loss = sess.run([train_step, loss], feed_dict={x:batch_x, y:batch_y})
# 평균 손실을 측정
average_loss += current_loss / total_batch
# 지정된 epoch마다 학습결과를 출력
if epoch % display_step == 0:
print("반복(Epoch) : %d, 손실함수(Loss) : %f"%((epoch+1), average_loss))
# 테스트 데이터를 이용해서 학습된 모델이 얼마나 정확한지 정확도를 출력
correct_prediction = tf.equal(tf.argmax(predicted_value, 1), tf.argmax(y,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
print("정확도(Accuracy) : %f" % (accuracy.eval(feed_dict={x:mnist.test.images,
y:mnist.test.labels})))
## 정확도 약 94%
=> 손실함수가 점점 줄어들면서 정확도가 94% 까지 올라간것을 볼 수 있음!
'딥러닝' 카테고리의 다른 글
0813 ResNet 프로젝트 (0) | 2019.08.13 |
---|---|
0813 CNN으로 MNIST 분류기 구현하기 (0) | 2019.08.13 |
0812 소프트맥스 회귀로 MNIST 데이터 분석하기 (0) | 2019.08.12 |
0812 텐서플로 기초 (0) | 2019.08.12 |
0812 LSTM 텍스트 생성모델 구현 (온도 샘플링) (0) | 2019.08.12 |