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) ## 원핫코딩
## 입력값과 출력값을 받기 위한 플레이스 홀더를 정의
x = tf.placeholder(tf.float32, shape=[None, 784])
y = tf.placeholder(tf.float32, shape=[None, 10])
## 변수들을 설정하고 소프트맥스 회귀 모델을 정의
W = tf.Variable(tf.zeros(shape=[784, 10]))
b = tf.Variable(tf.zeros(shape=[10]))
logits = tf.matmul(x, W)+b
y_pred = tf.nn.softmax(logits)
## cross_entropy 손실 함수와 옵티마이저를 정의
loss = tf.reduce_mean(-tf.reduce_sum(y * tf.log(y_pred), reduction_indices=[1]))
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(loss)
## 세션을 열고 변수들에 초기값을 할당
sess = tf.Session()
sess.run(tf.global_variables_initializer())
## 1000번 반복 수행
for i in range(1000) :
batch_xs, batch_ys = mnist.train.next_batch(100)
sess.run(train_step, feed_dict={x:batch_xs, y:batch_ys})
## 학습이 끝나면 모델의 정확도를 출력
correct_prediction = tf.equal(tf.argmax(y_pred,1), tf.argmax(y,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
print("정확도(Accuracy) : %f" % sess.run(accuracy, feed_dict={x:mnist.test.images, y:mnist.test.labels}))
sess.close()
> tf_nn_sparse_softmax_cross_entropy_with_logits
: 원핫코딩 하지 않아도 스스로 원핫코딩을하고 softmax를 이용해서 학습함
## 선형회귀 p.52
import tensorflow as tf
# 선형회귀모델 (Wx+b)을 정의합니다.
W = tf.Variable(tf.random_normal(shape=[1]), name="W")
b = tf.Variable(tf.random_normal(shape=[1]), name="b")
x = tf.placeholder(tf.float32)
linear_model = W*x + b
## True Value를 입력받기 위한 플레이스 홀더를 정의
y = tf.placeholder(tf.float32)
## 손실 함수 정의
loss = tf.reduce_mean(tf.square(linear_model - y)) ## MSE 손실함수
## 텐서보드를 위한 요약정보(scalar)를 정의
tf.summary.scalar('loss', loss) ## 무엇을 관찰할지 위에있는 변수중에서 써야함
## 최적화를 위한 그라디언트 디센트 옵티마이저를 정의
optimizer = tf.train.GradientDescentOptimizer(0.01)
train_step = optimizer.minimize(loss) ## 최소의 손실로 만들어주려고
## 트레이닝을 위한 입력값과 출력값을 준비
x_train = [1,2,3,4]
y_train = [2,4,6,8]
## 세션을 실행하고 파라미터(W,b)를 normal distribution에서 추출한 임의의 값으로 초기화
sess = tf.Session()
sess.run(tf.global_variables_initializer()) ##
## 텐서보드 요약정보들을 하나로 합친
merged = tf.summary.merge_all()
## 텐서보드 summary 정보들을 저장할 폴더 경로를 설정
tensorboard_writer = tf.summary.FileWriter('./tensorboard_log', sess.graph)
## 경사하강법을 1000번 수행
for i in range(1000) :
sess.run(train_step, feed_dict={x:x_train, y:y_train})
## 스텝마다 텐서보드 요약 정보 값들을 계산해서 지정한 경로에 저장
summary = sess.run(merged, feed_dict={x:x_train, y:y_train})
tensorboard_writer.add_summary(summary, i)
## 테스트를 위한 입력값을 준비
x_test = [3.5, 5, 5.5, 6]
## 테스트 데이터를 이용해 학습된 선형회귀 모델이 데이터의 경향성을 잘 학습했는지 측정
## (y=2x)
## 예상되는 참값 : [7, 10 ,11 ,12]
print(sess.run(linear_model, feed_dict={x:x_test}))
sess.close()
'딥러닝' 카테고리의 다른 글
0813 CNN으로 MNIST 분류기 구현하기 (0) | 2019.08.13 |
---|---|
0812 ANN을 이용한 MNIST 숫자 분류기 구현 (0) | 2019.08.12 |
0812 텐서플로 기초 (0) | 2019.08.12 |
0812 LSTM 텍스트 생성모델 구현 (온도 샘플링) (0) | 2019.08.12 |
0807 텍스트 데이터 다루기2 [모든 내용 적용하기] (0) | 2019.08.07 |