p.34~
tensorflow : 텐서를 흘려보내면서 데이터를 처리하는 라이브러리
텐서들은 계산 그래프구조를 통해 노드에서 노드로 이동
> 텐서플로 그래프 생성
- shape() 이라는 것은 스칼라 값을 의미함.
- 사용할것이라고 선언만 한 것. 실행은 따로함! (-> 세션을 열어서 수행해야함)
## 그래프 노드를 정의하고 출력
node1 = tf.constant(3.0, dtype=tf.float32) ## 상수값을 표현
node2 = tf.constant(4.0) # 암시적으로 tf.float32 타입으로 선언될것
print(node1, node2)
> 텐서플로 그래프 실행
## 세션을 열고 그래프를 실행합니다.
# 출력값 : [3.0, 4.0]
sess = tf.Session()
print(sess.run([node1, node2]))
> 더 복잡한 그래프 구조 생성(더복잡한 연산을 수행)
- node3은 +(연산자)라고 볼 수 있음.
> 모든 코드를 실행 후 세션 종료.
sess.close()
==> 상수값을 사용하였기 때문에 다른값으로 바꾸어 계산할 수 없음
플레이스 홀더
- 임의의 값을 입력받아서 임의의 값을 출력하기 위한 텐서플로 API .
(만약 위에서 세션을 닫았다면 sess = tf.Session() 으로 세션을 다시 열어주어야 함!)
- feed_dict : 정해진 argument 이름. -> 항상 우리가 지정해주어야함
## 플레이스 홀더 노드와 add 노드를 정의합니다.
a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
adder_node = a+b # 암시적으로 tf.add(a,b) 형태로 정의될 것.
- 노드를 추가한 더 복잡한 그래프 형태
## 노드를 추가해서 더 복잡한 그래프 형태를 만들기
# 출력값 : 22.5
add_and_triple = adder_node * 3
tf.multiply(adder_node, 3)
print(sess.run(add_and_triple, feed_dict={a:3, b:4.5}))
머신러닝의 프로세스
선형회귀
- tf.Variable : 변수만들기
-
## 선형회귀 p.52
import tensorflow as tf
# 선형회귀모델 (Wx+b)을 정의합니다.
W = tf.Variable(tf.random_normal(shape=[1]))
b = tf.Variable(tf.random_normal(shape=[1]))
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 손실함수
## 최적화를 위한 그라디언트 디센트 옵티마이저를 정의
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())
## 경사하강법을 1000번 수행
for i in range(1000) :
sess.run(train_step, feed_dict={x:x_train, y:y_train})
## 테스트를 위한 입력값을 준비
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()
> 텐서보드를 이용한 그래프 시각화
손실함수 정의 코드 밑에 코드 추가
## 텐서보드를 위한 요약정보(scalar)를 정의
tf.summary.scalar('loss', loss) ## 무엇을 관찰할지 위에있는 변수중에서 써야함
> for문안에 run하는 모든 정보를 갖고 있어야함. 코드추가
- ~~_writer.add_summary(summary,i) : add해주면서 갖고온 정보를 주는데 스텝은 i로 넘어가게됨.
## 텐서보드 요약정보들을 하나로 합친
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, geed_dict={x:x_train, y:y_train})
tensorboard_writer.add_summary(summary, i)
> 실행한뒤 아나콘다에서 확인
-> edge에서 실행
아래와 같이 인터넷 session을 통해 시각화된 그래프를 볼 수 있음
'딥러닝' 카테고리의 다른 글
0812 ANN을 이용한 MNIST 숫자 분류기 구현 (0) | 2019.08.12 |
---|---|
0812 소프트맥스 회귀로 MNIST 데이터 분석하기 (0) | 2019.08.12 |
0812 LSTM 텍스트 생성모델 구현 (온도 샘플링) (0) | 2019.08.12 |
0807 텍스트 데이터 다루기2 [모든 내용 적용하기] (0) | 2019.08.07 |
0807 17장 RNN [로이터 뉴스 카테고리 분류하기] (0) | 2019.08.07 |