High level api Vs Low level api - pai-plznw4me/tensorflow_basic GitHub Wiki

Tensorflow Modeling

1. κ°œμš”

Tensorflow λŠ” μš°λ¦¬κ°€ μ„€κ³„ν•œ μ•Œκ³ λ¦¬μ¦˜μ„ μ‰½κ²Œ κ΅¬ν˜„ν•˜κ²Œ ν•΄μ€„μˆ˜ 있게 λ„μ™€μ£ΌλŠ” λ”₯λŸ¬λ‹ ν”„λ ˆμž„ μ›Œν¬μž…λ‹ˆλ‹€.
이번 μ‹œκ°„μ—λŠ” Tensorflow 을 ν™œμš©ν•΄ μ–΄λ–»κ²Œ λͺ¨λΈμ„ κ΅¬ν˜„ν•  수 μžˆλŠ”μ§€ μ‚΄νŽ΄ λ³΄κ² μŠ΅λ‹ˆλ‹€.
ν•΄λ‹Ή PostλŠ” Tensorflow 을 ν™œμš©ν•΄ ML λͺ¨λΈμ„ λ§Œλ“œλŠ” λŒ€ν‘œμ μΈ 2κ°€μ§€ 방법을 μ„€λͺ…ν•©λ‹ˆλ‹€.

  • Tensorflow low level api
  • Tensorflow high level api(Keras)

❖ MNIST Dataset을 Deep Neural Network 을 톡해 λΆ„λ₯˜ν•˜λŠ” 예제둜 μœ„ κ°œλ…λ“€μ„ μ„€λͺ…ν•©λ‹ˆλ‹€.
λ§Œμ•½ MNIST 에 λŒ€ν•œ κ°œλ…μ΄ λΆ€μ‘±ν•˜λ‹€λ©΄ DNN 파트λ₯Ό μ°Έκ³ ν•΄μ£Όμ„Έμš”.

2. High level api Vs Low level api

2.1 High level api

TensorflowλŠ” μœ μ €κ°€ λ”₯λŸ¬λ‹ λ˜λŠ” λ¨Έμ‹ λŸ¬λ‹μ„ 보닀 μ‰½κ²Œ κ΅¬ν˜„ν•  수 μžˆλ„λ‘ APIλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.
이런 API 을 High Level API 라고 ν•©λ‹ˆλ‹€.
λŒ€ν‘œμ μΈ Tensorflow 의 High level api 인 Keras 을 μ‚¬μš©ν•΄ Fully Connected Layer을 ν•œ μΈ΅ κ΅¬ν˜„ν•΄ 보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€.
Fully Connected Layer λŠ” 크게 2κ°€μ§€ 단계λ₯Ό κ±°μΉ©λ‹ˆλ‹€.

  • Step 1. μž…λ ₯κ°’(X) κ³Ό κ°€μ€‘μΉ˜(W)을 내적(Inner Product)ν•©λ‹ˆλ‹€.
  • Step 2. ν™œμ„±ν™” ν•¨μˆ˜(Activation function)을 Step1 의 결과에 μ μš©ν•©λ‹ˆλ‹€.
a = Dense(units=64, activation='relu')(X)

High level api λŠ” μ‰½κ²Œ μ½”λ“œλ₯Ό κ΅¬ν˜„ν•  수 μžˆλŠ” μž₯점이 μžˆμ§€λ§Œ λ°˜λŒ€λ‘œ λ‚΄λΆ€μ—μ„œ μ–΄λ–€ 연산듀이 μ§„ν–‰λ˜λŠ”μ§€ μ‰½κ²Œ μ•ŒκΈ° μ–΄λ €μš΄ 단점이 μžˆμŠ΅λ‹ˆλ‹€.
(λ¬Όλ‘  High level api 의 μ •μ˜(declaration) 을 μ‚΄νŽ΄ 봐 ν•¨μˆ˜ λ‚΄λΆ€μ˜ μž‘λ™ 원리λ₯Ό μ•Œμˆ˜ μžˆμŠ΅λ‹ˆλ‹€.)

또 λ‹€λ₯Έ λ‹¨μ μœΌλ‘œλŠ” μ•Œκ³ λ¦¬μ¦˜μ˜ λ‚΄λΆ€ μž‘λ™ 방식을 λ‹€λ₯΄κ²Œ λ°”κΏ”μ„œ μž‘λ™ μ‹œν‚€κ³  싢을 λ•Œ
High level api κ°€ 바뀐 κΈ°λŠ₯을 제곡 ν•˜κ³  μ•ŠλŠ”λ‹€λ©΄ high level api μ—μ„œ κ΅¬ν˜„ ν•  수 μ—†λŠ” 단점이 μžˆμŠ΅λ‹ˆλ‹€.

2.2 Low level api

High level api 의 단점을 κ·Ήλ³΅ν•˜κ³ μž Low level api 을 μ•Œκ³  μžˆλŠ” 것은 μ€‘μš”ν•©λ‹ˆλ‹€.
μœ„ Fully Connected Layer 을 Tensorflow 의 Low level api 둜 κ΅¬ν˜„ν•΄ 보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€.


# Weightλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. 
init_w = tf.random.normal(mean=0.0, stddev=1.0, shape=(784, 64))
w = tf.Variable(init_w)

# Bias을 μƒμ„±ν•©λ‹ˆλ‹€. 
init_b = tf.zeros((64))
b = tf.Variable(init_b)

# Inner product 을 μˆ˜ν–‰ν•©λ‹ˆλ‹€. 
z = tf.matmul(X, w)

# Activation Function 인 Relu을 μ μš©ν•©λ‹ˆλ‹€. 
a = tf.relu(z)

μ½”λ“œμ˜ μ€„μˆ˜κ°€ High level api 을 μ‚¬μš©ν•œ 것보닀 ν™•μ‹€νžˆ 많이 λŠ˜μ–΄λ‚œ 것듀을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
ν•˜μ§€λ§Œ μ€„μˆ˜κ°€ λŠ˜μ–΄λ‚œ 만큼 μ•Œκ³ λ¦¬μ¦˜μ„ μˆ˜ν–‰ν•΄μ•Ό ν•˜λŠ” 각 단계λ₯Ό 보닀 λͺ…ν™•νžˆ 이해 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

κ°€λ Ή High level api μ—μ„œ μ•Œμˆ˜ μ—†μ—ˆλ˜ weight의 μ΄ˆκΈ°κ°’(initial value) κ°€ 평균 0, λΆ„μ‚° 1 인 μ •κ·œ 뢄포 둜 λ˜μ–΄ μžˆλ‹€λŠ”κ±Έ μ½”λ“œλ‘œ μ•Œ 수 있고
bias 의 μ΄ˆκΈ°κ°’μ΄ 0.0 으둜 λ˜μ–΄ μžˆλ‹€λŠ” 것을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

init_w = tf.random.normal(mean=0.0, stddev=1.0, shape=(784, 64))
init_b = tf.zeros((64))

Sum-up

  1. high level api 둜 μž‘μ„±ν•΄μ„œ λ¬Έμ œκ°€ 생길 μ΄μŠˆκ°€ μ—†λ‹€λ©΄ κ°€λŠ₯ν•˜λ©΄ high level api 둜 λ¨Όμ € ν”„λ‘œκ·Έλž¨μ„ μž‘μ„± ν•˜λŠ” 것이 λ°”λžŒμ§ν•˜λ‹€.
  • λͺ¨λ‘κ°€ μ•Œκ³  μžˆλŠ” λ³€μˆ˜λͺ…, ν•¨μˆ˜λͺ… 등을 톡해 ν˜‘μ—…ν•˜κΈ°κ°€ 맀우 μˆ˜μ›”ν•΄μ§„λ‹€.
  • 이미 κ²€μ¦λœ μ½”λ“œμž„μœΌλ‘œ μœ μ§€ λ³΄μˆ˜κ°€ μˆ˜μ›”ν•΄μ§„λ‹€.
  • μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ”λ° μ‹œκ°„μ΄ 적게 κ±Έλ¦°λ‹€.
  1. λ§Œμ•½ High level api둜 μž‘μ„±μ‹œ λ¬Έμ œκ°€ μƒκ²ΌμœΌλ©΄ λ¬Έμ œκ°€ 생긴 뢀뢄을 low level api 둜 λ³€κ²½ν•œλ‹€.
  • example) serving μ΄λ‚˜ 배포 ν™˜κ²½μ—μ„œ high Level API κ°€ μž‘λ™ν•˜μ§€ μ•Šμ„λ•Œκ°€ μžˆλ‹€.
    μ΄λ•ŒλŠ” High level api을 Low level api 둜 λ³€κ²½ ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€.