Eager Mode
수용 - 그래프를 완성하지 않아도 부분적 실행 가능 / 설계, 구현, 디버깅이 쉬움
머신러닝 프레임워크Keras
수용 (표준 API)
Ease of use(사용하기 쉬움)
Eager Execution(즉시 실행)
Model Building and deploying made easy(설계 구현 용이성)
The Data pipeline simplified(데이터 파이프라인 단순화)
Graph Mode
: Tensorflow
를 거대한 노드-엣지 사이의 유향 비순환 그래프(Directed Acyclic Graph, DAG)
로 정의 → 엣지간 chain-rule
기반 gradient
역방향 전파가 가능
단점:
그래프를 그리는 부분과 연산 과정 분리: 그래프 내 연산은
session.run()`을 통해서만 가능하도록 제한
사용하기 어려움 → 파이써닉하지 않음 → 구현 난이도 높음
장점: 대규모 분산 환경에서의 확장성과 생산성
Eagr Mode
: 딥러닝 그래프가 완전히 그려지지 않아도 부분 실행 및 오류검증 가능
간결한 코드, 파이써닉함
Sequential
Functional
: Sequential
보다 일반화된 개념Model Subclassing
: 클래스로 구현된 기존의 모델을 상속받아 모델을 만들어나가는 방식
import tensorflow as tf
from tensorflow import keras
model = keras.Sequential()
model.add(__넣고싶은 레이어__)
model.add(__넣고싶은 레이어__)
model.add(__넣고싶은 레이어__)
model.fit(x, y, epochs=10, batch_size=32)
초보자가 접근하기 쉬움
모델에 다수의 입출력이 있을 경우 적합하지 않음
입력과 출력이 각 1가지 임을 전제로 함
import tensorflow as tf
from tensorflow import keras
inputs = keras.Input(shape=(__원하는 입력값 모양__))
x = keras.layers.__넣고싶은 레이어__(관련 파라미터)(input)
x = keras.layers.__넣고싶은 레이어__(관련 파라미터)(x)
outputs = keras.layers.__넣고싶은 레이어__(관련 파라미터)(x)
model = keras.Model(inputs=inputs, outputs=outputs)
model.fit(x,y, epochs=10, batch_size=32)
keras.Model
사용 → 일반적인 접근
입력과 출력을 규정함으로써 모델 전체를 규정
다중입력/출력 모델 구성 가능
keras.Input
으로 정의된 input및 output 레이어 구성을 통해 model을 구현
import tensorflow as tf
from tensorflow import keras
class CustomModel(keras.Model):
def __init__(self):
super(CustomModel, self).__init__()
self.__정의하고자 하는 레이어__()
self.__정의하고자 하는 레이어__()
self.__정의하고자 하는 레이어__()
def call(self, x):
x = self.__정의하고자 하는 레이어__(x)
x = self.__정의하고자 하는 레이어__(x)
x = self.__정의하고자 하는 레이어__(x)
return x
model = CustomModel()
model.fit(x,y, epochs=10, batch_size=32)
가장 자유롭게 모델링 진행 가능
keras.Model
을 상속받은 모델 클래스를 만드는 것
__init__()
안에 레이어 구성 정의 (레이어 선언)
call()
안에 레이어간 forward propagation
구현
call()
의 입력이 Input
이고, call()
의 리턴값이 Output
model.fit()
는 아래 모든 과정을 포함tf.GradientTape
model.compile()
, model.fit()
내 스텝의 학습 단계 재구성 가능model.compile()
tape.gradient()
: 학습 시 발생하는 그래디언트 추출