πŸ“—
JunegLee's TIL
  • TIL
  • python
    • class
    • String Basic
    • regularExpression
    • String function
    • Generator
    • String format
    • getset
    • module
    • while
    • numpy
    • print()
    • matplotlib
    • for
    • Boolean
    • tuple
    • package
    • input(variable)
    • list
    • if
    • file
    • type()
    • pandas
    • function
    • dictionary
    • ꡬ문 였λ₯˜μ™€ μ˜ˆμ™Έ
    • builtinFunction
    • Constructor
  • algorithm
    • sort
      • mergeSort
      • insertionSort
      • bubbleSort
      • heapSort
      • quickSort
      • selectionSort
    • recursion
    • Greedy
    • DepthFirstSearch
    • basic
      • DataStructure
    • hash
    • BreadthFirstSearch
  • tensorflow
    • keras
      • layers
        • Flatten
        • Flatten
        • Dense
        • Dense
        • Conv2D
        • Conv2D
    • tensorflow1x
    • tensorflow2x
  • DB
    • setting
    • join
    • subQuery
    • overview
  • deep-learning
    • neuralNetwork
    • perceptron
    • neuralNetworkLearning
    • convolution neural network
    • Gradient Descent
    • Linear Regression
    • backPropagation
    • logistic regression
    • overview
  • textPreprocessing
    • overview
  • java
    • basics
      • generic
      • Variable
      • String
    • theory
      • Object Oriented Programing
  • NLP
    • Embedding
    • Natural Language Processing
Powered by GitBook
On this page
  • tensorflow (version 1.x)
  • ν…μ„œν”Œλ‘œ 1.x의 이해
  • ν…μ„œν”Œλ‘œ 1.x 계산 κ·Έλž˜ν”„(computational graph) ꡬ쑰
  • κ³„μ‚°κ·Έλž˜ν”„
  • 계산 κ·Έλž˜ν”„μ˜ 예제
  • μƒμˆ˜, λ³€μˆ˜, ν”Œλ ˆμ΄μŠ€ν™€λ”μ™€ μž‘μ—…
  • μƒμˆ˜
  • μ‹œν€€μŠ€ (sequences)
  • 랜덀 ν…μ„œ
  • λ³€μˆ˜ : tf.variable

Was this helpful?

  1. tensorflow

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) 객체λ₯Ό μ‚¬μš©ν•΄ μˆ˜ν–‰λœλ‹€. μ„Έμ…˜ κ°μ²΄λŠ” ν•œ κ³„μΈ΅μ—μ„œ λ‹€λ₯Έ 게측으둜 μ •λ³΄μ˜ μ‹€μ œ 계산과 전솑이 μ΄λ€„μ§€λŠ” 곳이닀. λ‹€λ₯Έ ν…μ„œ 객체의 값은 μ„Έμ…˜ κ°μ²΄μ—μ„œλ§Œ μ΄ˆκΈ°ν™”, μ ‘κ·Ό, μ €μž₯λœλ‹€. 이 μ‹œμ κΉŒμ§€ ν…μ„œ κ°μ²΄λŠ” 좔상적인 μ •μ˜ 뢈과

κ·Έλž˜ν”„λ₯Ό μ‚¬μš©ν•˜λŠ” 이유

  1. κ·Έλž˜ν”„λŠ” (심측) 신경망을 μ„€λͺ…ν•΄ 쀄 수 μžˆλŠ” μžμ—°μŠ€λŸ¬μš΄ λΉ„μœ κ°€ λœλ‹€

  2. κ·Έλž˜ν”„λŠ” 곡톡 ν•˜μœ„ ν‘œν˜„μ‹μ„ μ œκ±°ν•˜κ³ , 컀널을 ν•©μΉ˜κ³ , 쀑볡 ν‘œν˜„μ‹μ„ μ œκ±°ν•΄μ„œ μžλ™μœΌλ‘œ μ΅œμ ν™”ν•  수 μžˆλ‹€.

  3. κ·Έλž˜ν”„λŠ” ν›ˆλ ¨ 쀑에 μ‰½κ²Œ 배포할 수 있으며, CPU,GPU,TPU 같은 λ‹€μ–‘ν•œ ν™˜κ²½κ³Ό ν΄λΌμš°λ“œ, IOT, λͺ¨λ°”일, κΈ°μ‘΄ μ„œλ²„ 같은 λ‹€μ–‘ν•œ ν™˜κ²½μ— 배포할 수 μžˆλ‹€.

  4. κ²°κ΅­ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ— μ΅μˆ™ν•˜λ‹€λ©΄ 계산 κ·Έλž˜ν”„λŠ” λ‹¨μˆœ ν”„λ¦¬λ―Έν‹°λΈŒ(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}))
PreviousConv2DNexttensorflow2x

Last updated 4 years ago

Was this helpful?

comGraph