FUNDAMENTAL | 18. TF2 API 개요
20211018
1. Tensorflow2 구성과 특징
Eager Mode
수용 - 그래프를 완성하지 않아도 부분적 실행 가능 / 설계, 구현, 디버깅이 쉬움
머신러닝 프레임워크Keras
수용 (표준 API)
-
Ease of use(사용하기 쉬움)
-
Eager Execution(즉시 실행)
-
Model Building and deploying made easy(설계 구현 용이성)
-
The Data pipeline simplified(데이터 파이프라인 단순화)
Tensorflow V1
-
Graph Mode
:Tensorflow
를 거대한 노드-엣지 사이의유향 비순환 그래프(Directed Acyclic Graph, DAG)
로 정의 → 엣지간chain-rule
기반gradient
역방향 전파가 가능 -
단점:
-
그래프를 그리는 부분과 연산 과정 분리:
그래프 내 연산은
session.run()`을 통해서만 가능하도록 제한 -
사용하기 어려움 → 파이써닉하지 않음 → 구현 난이도 높음
-
-
장점: 대규모 분산 환경에서의 확장성과 생산성
PyTorch
-
Eagr Mode
: 딥러닝 그래프가 완전히 그려지지 않아도 부분 실행 및 오류검증 가능 -
간결한 코드, 파이써닉함
2. Tensorflow2 API로 모델 구성하기
- TensorFlow2 딥러닝 작성 방법
Sequential
Functional
:Sequential
보다 일반화된 개념Model Subclassing
: 클래스로 구현된 기존의 모델을 상속받아 모델을 만들어나가는 방식
TensorFlow2 Sequential Model
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가지 임을 전제로 함
TensorFlow2 Functional API
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을 구현
TensorFlow2 Subclassing
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
3. GradientTape의 활용
- TF2 API의
model.fit()
는 아래 모든 과정을 포함- Forward Propagation 수행 및 중간 레이어값 저장
- Loss 값 계산
- 중간 레이어값 및 Loss를 활용한 체인룰(chain rule) 방식의 역전파(Backward Propagation) 수행
- 학습 파라미터 업데이트
tf.GradientTape
- 순전파(forward pass) 로 진행된 모든 연산의 중간 레이어값을 tape에 기록
- gradient 계산한 후 tape 폐기 기능
model.compile()
,model.fit()
내 스텝의 학습 단계 재구성 가능- GAN(Generative Advasarial Network)의 학습에서 train_step 메소드 재구성 필수적
-
model.compile()
- loss 및 그래디언트가 어떻게 학습 파라미터를 업데이트하게 되는지를 지정해 주는 작업
-
tape.gradient()
: 학습 시 발생하는 그래디언트 추출
추가 자료
Overview of changes from TF V1 to TF V2
Author And Source
이 문제에 관하여(FUNDAMENTAL | 18. TF2 API 개요), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@tjddus0302/FUNDAMENTAL-18.-TF2-API-개요저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)