tensorflow1x
tensorflow (version 1.x)
ν
μνλ‘ 1.xμ μ΄ν΄
import tensorflow as tf
message = tf.constant('hello world')
with tf.session() as sess:
print(sess.run(message).decode())
ν
μνλ‘ 1.x κ³μ° κ·Έλν(computational graph) ꡬ쑰
κ³μ°κ·Έλν
: κ³μ° κ·Έλνλ λ Έλ(node) μ μμ§(edge)λ₯Ό κ°μ§ λ€νΈμν¬μ΄λ€. μ¬κΈ°μμ μ¬μ©ν λͺ¨λ λ°μ΄ν°, μ¦ ν μ κ°μ²΄(μμ, λ³μ, νλ μ΄μ€νλ(placeholder))μ μμ΅ν λͺ¨λ κ³μ° μ¦μ°μ κ°μ²΄κ° μ μ λλ€.
νλ μ΄μ€νλ(placeholder)λ λ¨μν λμ€μ λ°μ΄ν°λ₯Ό ν λΉνκ· μν λ³μ. μ΄λ₯Ό μ¬μ©νλ©΄ λ°μ΄ν° μμ΄λ κ³μ° κ·Έλνλ₯Ό μμ±ν μ μλ€
κ° λ Έλλ 0κ° μ΄μ¬μ μ λ ₯μ κ°μ§ μ μμ§λ§ νλμ μΆλ ₯λ§ μμ§ μ μλ€. λ€νΈμν¬μ λ Έλλ κ°μ²΄(ν μ(tensor)μ μ°μ°(operations))λ₯Ό λνλ΄κ³ μμ§λ μ°μ° κ°μ νλ₯΄λ ν μλ₯Ό λνλΈλ€. κ³μ° κ·Έλνλ μ κ²½λ§μ μ²μ¬μ§μ μ μνμ§λ§ κ·Έμμ ν μμλ μμ§ μ°κ³λ κ°μ΄ μλ€.
κ·Έλνμ μ€ν
κ·Έλνμ μ€νμ ν μμ μ°μ° κ°μ²΄κ° νκ°λλ νκ²½μ μΊ‘μννλ μΈμ (session) κ°μ²΄λ₯Ό μ¬μ©ν΄ μνλλ€. μΈμ κ°μ²΄λ ν κ³μΈ΅μμ λ€λ₯Έ κ²μΈ΅μΌλ‘ μ 보μ μ€μ κ³μ°κ³Ό μ μ‘μ΄ μ΄λ€μ§λ κ³³μ΄λ€. λ€λ₯Έ ν μ κ°μ²΄μ κ°μ μΈμ κ°μ²΄μμλ§ μ΄κΈ°ν, μ κ·Ό, μ μ₯λλ€. μ΄ μμ κΉμ§ ν μ κ°μ²΄λ μΆμμ μΈ μ μ λΆκ³Ό
κ·Έλνλ₯Ό μ¬μ©νλ μ΄μ
κ·Έλνλ (μ¬μΈ΅) μ κ²½λ§μ μ€λͺ ν΄ μ€ μ μλ μμ°μ€λ¬μ΄ λΉμ κ° λλ€
κ·Έλνλ κ³΅ν΅ νμ ννμμ μ κ±°νκ³ , 컀λμ ν©μΉκ³ , μ€λ³΅ ννμμ μ κ±°ν΄μ μλμΌλ‘ μ΅μ νν μ μλ€.
κ·Έλνλ νλ ¨ μ€μ μ½κ² λ°°ν¬ν μ μμΌλ©°, CPU,GPU,TPU κ°μ λ€μν νκ²½κ³Ό ν΄λΌμ°λ, IOT, λͺ¨λ°μΌ, κΈ°μ‘΄ μλ² κ°μ λ€μν νκ²½μ λ°°ν¬ν μ μλ€.
κ²°κ΅ ν¨μν νλ‘κ·Έλλ°μ μ΅μνλ€λ©΄ κ³μ° κ·Έλνλ λ¨μ ν리미ν°λΈ(primitives: μ΄κΈ°μ )μ ν©μ±μ΄λΌλ μΌλ°μ μΈ κ°λ μΌ λΏμ΄λ€.
κ³μ° κ·Έλνμ μμ

import tensorflow as tf
v_1 = tf.constant([1, 2, 3, 4])
v_2 = tf.constant([2, 1, 5, 3])
v_add = tf.add(v_1, V_2)
with tf.Session() as sess:
print(sess.run(v_add)) # [3, 3, 8, 7]
# λ€λ₯Έ νν
# sess = tf.Session()
# print(sess.run(v_add))
# sess.close()
ν μνλ‘λ₯Ό μ¬μ©νλ©΄ tf.device()λ₯Ό μ¬μ©ν΄ κ³μ° κ·Έλνμ λ€λ₯Έ κ°μ²΄μ ν¨κΌ νΉμ μ₯μΉ(CPU/GPU)λ₯Ό μ¬μ©ν μ μλ€.
run(fetches, feed_dict=None, options=None, run_metadata)
μ΄ λͺ λ Ήμ fetches λ§€κ°λ³μμμ ν μλ₯Ό κ³μ°νλ€. μμ μμλ fetchesμ v_addν μκ° μλ€. run λ©μλλ v_addλ‘ μ΄μ΄μ§λ κ·Έλν λ΄μ λͺ¨λ ν μμ μ°μ°μ μ€ννλ€.
fetchesλ λ¨μΌ ν μλ μ°μ° κ°μ²΄ νΉμ λ μ΄μμΌ μ μλ€. μλ₯Ό λ€λ©΄ fetchesκ° [v_1, V_2, V_add]λ₯Ό κ°μ§λ€λ©΄ μΆλ ₯μ [array([1, 2, 3, 4]), array([2, 1, 5, 3]), array([3, 3, 8, 7])] μ΄λ©°, λμΌν νλ‘κ·Έλ¨ μ½λ λ΄μμ λ€μμ μΈμ κ°μ²΄λ₯Ό κ°μ§ μ μλ€.
μμ, λ³μ, νλ μ΄μ€νλμ μμ
: ν μνλ‘λ κ°λ¨ν λ§ν΄ λ€μν μν μ°μ°μ ν μλ‘ μ μνκ³ μννλ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ 곡νλκ²μ΄λ©°, ν μλ κΈ°λ³Έμ μΌλ‘ nμ°¨μ λ°°μ΄μ΄λ€. λͺ¨λ μ νμ λ°μ΄ν°, μ¦ μ€μΉΌλΌ, 벑ν°, νλ ¬μ νΉμν ννμ ν μμ΄λ€.
λ°μ΄ν° νμ
ν μ
νν
μ€μΉΌλΌ
0μ°¨μ ν μ
[]
벑ν°
1μ°¨μ ν μ
[D0]
νλ ¬
2μ°¨μ ν μ
[D0, D1]
ν μ
nμ°¨μ ν μ
[D0, D1, ... , Dn-1]
ν μνλ‘λ 3κ°μ§ μ νμ ν μλ₯Ό μ 곡 1. μμ : μμλ ν μμ΄λ©° κ°μ λ³κ²½ν μ μλ€ 2. λ³μ : μΈμ λ΄μμ κ°μ κ°±μ ν΄μΌ ν λ λ³μ ν μλ₯Ό μ¬μ© 3. νλ μ΄μ€ νλ : ν μνλ‘ κ·Έλνμ κ°μ λ£μ λ μ¬μ©λλ€. λ³΄ν΅ μ κ²½λ§μ νλ ¨μν€λ λμ μλ‘μ΄ νλ ¨ μμλ₯Ό μ 곡νλ λ° μ¬μ©λλ€.
μμ
μ€μΉΌλΌ μμ
t_1 = tf.constant(4)
t_2 = tf.constant([4, 3, 2])
λͺ¨λ μμμ κ°μ΄ 0μΈ ν μ : zeros()
tf.zeros([M,N], tf.dtype)
tf.zeros([2,3], tf.int32) # [[0, 0, 0], [0, 0, 0]]
λͺ¨λ μμμ κ°μ΄ 1μΈ ν μ : ones()
tf.ones([M,N], tf.dtype)
tf.ones([2,3], tf.int32) # [[1, 1, 1], [1, 1, 1]]
ν μμ νν νμΈ : shape
print(tf.zeros([2,3], tf.int32).shape) # (2, 3)
κΈ°λ³Έμ λνμ΄ λ°°μ΄ λλ ν μ μμμ λμΌν ννμ ν μ λ³μ
tf.zeros_like(t_2)
tf.ones_like(t_2)
λΈλ‘λμΊμ€νΈ
t = tf.Variable([[0., 1., 2.],[3., 4., 5.],[6., 7., 8.]])
print(t*2)
# tf.Tensor(
# [[ 0. 2. 4.]
# [ 6. 8. 10.]
# [12. 14. 16.]], shape=(3, 3), dtype=float32)
μνμ€ (sequences)
startλΆν° endκΉμ§ κ· λ±νκ² λΆν¬ν μ 체 numκ°μ μνμ€(Sequences)λ₯Ό μμ±
tf.linspace(start, stop, num) # ν΄λΉ κ°μ (stop-start)/(num-1)λ§νΌ λ€λ₯΄λ€
tf.linspace(2.0, 5.0, 5) # tf.Tensor([2. 2.75 3.5 4.25 5. ], shape=(5,), dtype=float32)
Start(κΈ°λ³Έμ€μ = 0) λΆν° limit(limitλ ν¬ν¨νμ§ μμ) κΉμ§ delta(κΈ°λ³Έμ€μ = 1)λ§νΌ μ¦κ°νλ©΄μ μνμ€ μλ₯Ό μμ±
tf.range(start, limit, delta)
tf.range(10) # tf.Tensor([0 1 2 3 4 5 6 7 8 9], shape=(10,), dtype=int32)
λλ€ ν
μ
νκ· μ΄ mean(κΈ°λ³Έμ€μ = 0.0), νμ€νΈμ°¨κ° stddev(κΈ°λ³Έμ€μ = 1.0) μ΄λ©°, ννκ° [M, N]μΈ μ κ· λΆν¬λ₯Ό λ°λ₯΄λ λλ€ κ°μ seedλ₯Ό μ΄μ©ν΄ μμ±
t_random = tf.random_normal([2, 3], mean = 2.0, stddev = 4, seed =12)
νκ· μ΄ mean(κΈ°λ³Έμ€μ = 0.0), νμ€νΈμ°¨κ° stddev(κΈ°λ³Έμ€μ = 1.0) μ΄λ©°, ννκ° [M, N]μΈ μλ €μ§ μ κ· λΆν¬λ₯Ό λ°λ₯΄λ λλ€ κ°μ seedλ₯Ό μ΄μ©ν΄ μμ±
t_random = tf.truncated_normal([1, 5], stddev = 2, seed =12)
seedλ₯Ό μ¬μ©ν΄ [minval (κΈ°λ³Έμ€μ = 0), maxval] λ²μμμ ννκ° [M, N]μΈ κ°λ§ λΆν¬λ₯Ό λ°λ₯΄λ λλ€ λ³μ
μ£Όμ΄μ§ ν μλ₯Ό νΉμ ν¬κΈ°λ‘ λλ€μΌλ‘ μ λ¨
t_random = tf.random_uniform([2, 3], maxval = 4, seed =12) # maxval λ²μμμμ λλ€ λ³μ
tf.random_crop(t_random, [2, 5], seed =12 ) # νΉμ ν¬κΈ°λ‘ μ λ¨
νλ ¨ νλ³Έμ λλ€ μμλ‘ λνλΌ νμκ° μμ λλ§λ€ tf.random_stuffle()μ μ¬μ©ν΄ ν μλ₯Ό λ¨λ€μΌλ‘ μ²«λ² μ§Έ μ°¨μ μΆμ λ°λΌ μλλ€. t_randomμ΄ μκ³ μ νλ ν μλΌλ©΄ λ€μκ³ κ°μ΄ νλ€
tf.random_shuffle(t_random)
λλ€μΌλ‘ μμ±ν ν μλ μ΄κΈ° μλ(seed)μ μν₯μ λ°λλ€. μ¬λ¬ λ²μ μ€ν λλ μΈμ μμ λμΌν λμλ₯Ό μ»μΌλ €λ©΄ μλκ° μμλ‘ μ€μ λΌμΌ νλ€. μ¬μ© μ€μΈ λλ€ ν μμ μκ° λ§μ κ²½μ° tf.set_random_seed()λ₯Ό μ¬μ©ν΄ λͺ¨λ λλ€ μμ± ν μμ μλλ₯Ό μ€μ ν μ μλ€
tf.set_random_seed(54)
λ³μ : tf.variable
λ³μ μ΄κΈ°ν : initializer
tf.global_variables_initializer()
# ------------exam
bias = tf.Variable(tf.zeros([100,100]))
with tf.Session() as sess:
sess.run(bias.initializer)
λ³μ μ μ₯ : saver
saver = tf.train.saver()
νλ μ΄μ€νλ
tf.placeholder(dtype, shape=None, name=None)
# dtype : placeholder λ°μ΄ν° νμμ μ§μ νλ©° νλ μ΄μ€ νλλ₯Ό μ μΈνλ λμ μ§μ ν΄μΌ νλ€
# νλ μ΄μ€ νλ μμ
# : xμ λν νλ μ΄μ€ νλλ₯Ό μ μνκ³ μμμ 4x5νλ ¬μ λν΄ feed_dictλ₯Ό μ¬μ©ν΄ y=2xλ₯Ό κ³μ°νλ€
# feed_dictλ ν
μνλ‘ νλ μ΄μ€νλμ κ°μ 곡κΈνλλ° μ¬μ©
x = tf.placeholder("float")
y = 2 * x
data = tf.random_uniform([4,5], 10)
with tf.Session() as sess:
x_data = sess.run(data)
print(sess.run(y, feed_dict = {x:x_data}))
Last updated
Was this helpful?