반응형

파이썬, 텐서플로우 예제

<출처: https://cyc1am3n.github.io/2018/10/22/intro_to_tensorflow_1.html>

출처에 있는 글 중에서 예제 위주로 정리해봤습니다. 

텐서플로우 버전 1.1.4 그리고 파이썬 버전 3.x 기준이므로 다른 버전에서 에러가 발생할 수 있습니다.

기존 텐서플로우 삭제: pip  uninstall tensorflow

텐서플로우 1.14 설치 or 다운그레이드: pip install tensorflow==1.14

 

 

TensorFlow tolkit hierarchy


TensorFlow tolkit hierarchy

 

텐서 평가 

import tensorflow as tf
from tensorflow.contrib.eager.python import tfe
tfe.enable_eager_execution()  # Call exactly once
x = tf.constant([3, 5, 7])
y = tf.constant([1, 2, 3])
print(x-y)
# 출력:
# tf.Tensor([2 3 4], shape=(3,), dtype=int32)

ptint(x+y)

# 출력:

# tf.Tensor([4 7 10], shape=(3,), dtype=int32)

 

그래프 시각화


  • tf.summary.FileWriter
import tensorflow as tf
x = tf.constant([3, 5, 7], name="x") # Name the tensors and the operations
y = tf.constant([1, 2, 3], name="y")
z1 = tf.add(x, y, name="z1")
z2 = x + y
z3 = z2 - z1
with tf.Session() as sess:
​	# Write the session graph to summary directory
​	with tf.summary.FileWriter('c:\\temp\\summaries', sess.graph) as writer:
​		a1, a3 = sess.run([z1, z3])

결과 확인

!ls summaries
event.out.tfevents.1517032067.e7cbb0325e48
  • 그래프 시각화는 이곳에서 가능:  TensorBoard.

 

텐서


  • 텐서(Tensor)는n N-차원 배열 자료

what is tensor


what is tensor

  • 텐서 자료 슬라이싱 
import tensorflow as tf
x = tf.constant([[3, 5, 7], [4, 6, 8]])
y = x[ :1]
with tf.Session() as sess:
​	print (y.eval())
# 결과:
# [5 6]
  • 텐서 자료 재구성
import tensorflow as tf
x = tf.constant([[3, 5, 7], [4, 6, 8]])
y = tf.reshape(x, [3, 2])
with tf.Session() as sess:
​	print (y.eval())
# 결과:
# [[3 5]
#  [7 4]
#  [6 8]
import tensorflow as tf
x = tf.constant([[3, 5, 7], [4, 6, 8]])
y = tf.reshape(x, [3, 2])[1, :]
with tf.Session() as sess:
​	print (y.eval())
# 결과:
# [7 4]

변수

def forward_pass(w, x):
​	return tf.matmul(w, x)
def train_loop(x, niter=5):
​	# Create variable, specifying how to init and whether it can be tuned
​	with tf.variable_scope("model", reuse=tf.AUTO_REUSE):
​		w = tf.get_variable("weights",
​					shape=(1, 2), # 1 x 2 matrix
​					initializer=tf.truncated_normal_initializer(),
​					trainable=True)
​	# "Training loop" of 5 updates to weights
​	preds = []
​	for k in xrange(niter):
​		preds.append(forward_pass(w, x))
​		w = w + 0.1 # "Gradient Update"
​	return preds
  • tf.get_variable : 변수 재사용이나 다른 상황에 맞도록 생성할 때 유용
with tf.Session() as sess:
​	# Multiplying [1,2] x [2,3] yields a [1,3] matrix
​	preds = train_loop(tf.constant([[3.2, 5.1, 7.2],[4.3, 6.2, 8.3]])) # 2 x 3 matrix
​	# Initialize all variables
​	tf.global_variables_initializer().run()
​	for i in xrange(len(preds)):
​		print ("{}:{}".format(i, preds[i].eval()))
# 결과:
# 0:[[-0.5322 -1.408 -2.3759]]
# 1:[[0.2177 -0.2780 -0.8259]]
# 2:[[0.9677 0.8519 0.724]]
# 3:[[1.7177 1.9769 2.2747]]
# 4:[[2.4677 3.1155 3.8245]]
  • 요약,
    1. 변수 생성: get_variable
    2. 변수 초기화 방식 결정
    3. 그래프 생성시 생성한 변수 사용 가능
    4. 세션에서 변수 초기화
    5. 텐서 평가 
  • Placeholders : 텍스트 파일 등에서 값 제공 가능 
import tensorflow as tf
a = tf.placeholder("float", None)
b = a * 4
print a
with tf.Session() as sess:
​	print(sess.run(b, feed_dict={a: [1,2,3]}))
# 결과:
# Tensor("Placeholder:0", dtype=float32)
# [4 8 12]
x = tf.constant([[3. 2], [4, 5], [6, 7]])
print "x.shape", x.shape
expanded = tf.expand_dims(x, 1)   # 1에 주의
print("expanded.shape", expanded.shape)
with tf.Session() as sess:
​	print("expanded:\n":, expanded.eval())
# 결과:
# x.shape (3, 2)
# expanded.shape (3, 1, 2)
# expanded:
# [[[3 2]]
#  [[4 5]]
#  [[6 7]]]
  • tf.slice : 텐서 슬라이싱
x = tf.constant([[3. 2], [4, 5], [6, 7]])
print "x.shape", x.shape
sliced = tf.slice(x, [0, 1], [2, 1])
print("sliced.shape", sliced.shape)
with tf.Session() as sess:
​	print("sliced:\n:", sliced.eval())
# 결과:
# x.shape (3, 2)
# sliced.shape (2, 1)
# sliced:
# [[2]
#  [5]]
  • tf.squeeze : 텐서 쉐이프에서 앞 1 차원 제거
t = tf.constant([[[1],[2],[3],[4]],[[5],[6],[7],[8]]])
with tf.Session() as sess:
​	print("t")
​	print(sess.run(t))
​	print("t squeezed")
​	print(sess.run(tf.squeeze(t)))
# 결과:
# t
# [[[1]
#   [2]
#   [3]
#   [4]]
#
#  [[5]
#   [6]
#   [7]
#   [8]]]
# t squeezed
# [[1 2 3 4]
#  [5 6 7 8]]

  • 디버깅
    • tf.Print()
    • tfdbg
    • TensorBoard
tf.logging.set_verbosity(tf.logging.INFO)
  • tf.Print(): 특정 텐서 값 로그 
def some_method(a, b):
​	b = tf.cast(b, tf.float32)
​	s = (a / b) # oops! NaN
​	print_ab = tf.Print(s, [a, b])
​	s = tf.where(tf.is_nan(s), tf.transpose(s)))
​	return tf.sqrt(tf.matmul(s, tf.transpose(s)))
with tf.Session() as sess:
​	fake_a = tf.constant([[5.0, 3.0, 7.1], [2.3, 4.1, 4.8]])
​	fake_b = tf.constant([[2, 0, 5], [2, 8, 7]])
​	print(sess.run(some_method(fake_a, fake_b))
%bash
python xyz.py
Output:
[[ nan     nan][ nan 1.43365264]]
 
import tensorflow as tf
from tensorflow.python impoty debug as tf_debug
def some_method(a, b):
​	b = tf.cast(b, tf.float32)
​	s = (a / b) # oops! NaN
​	return tf.sqrt(tf.matmul(s, tf.transpose(s)))
with tf.Session() as sess:
​	fake_a = tf.constant([[5.0, 3.0, 7.1], [2.3, 4.1, 4.8]])
​	fake_b = tf.constant([[2, 0, 5], [2, 8, 7]])
	sess = tf.debug.LocalCLIDegubWrapperSession(sess)
	sess.add_tensor_filter("has_inf_or_nan", tf_debug.has_inf_or_nan)
	print (sess.run(some_method(fake_a, fake_b))
# 터미널 창에서는
# python xyz.py --debug

<이상>

반응형

+ Recent posts