반응형
파이썬, 텐서플로우 예제
<출처: 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
텐서 평가
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-차원 배열 자료
- 텐서 자료 슬라이싱
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]]
- 요약,
변수 생성: get_variable
- 변수 초기화 방식 결정
- 그래프 생성시 생성한 변수 사용 가능
- 세션에서 변수 초기화
- 텐서 평가
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
<이상>
반응형
'AI 머신러닝' 카테고리의 다른 글
딥러닝과 신경망 모델 (0) | 2020.01.03 |
---|---|
기존 프로그래밍과 기계학습의 차이점 (0) | 2020.01.03 |
텐서플로우, 케라스 사이트 (0) | 2020.01.01 |
기계학습 자료와 분석 유형 (0) | 2019.12.30 |
기계학습(머신러닝, machine learning) 방식, 지도학습, 비지도학습, 강화학습 (0) | 2019.12.27 |