Tensorflow2

매일 공부(ML)·2021년 10월 18일
0

CS 

목록 보기
15/33

Tensorflow2

  • 특징
    : 딥러닝 프레임워크.

    : forward propagation 모델 설계 시 gradient를 미리 구할 수 있다.(by 유향 비순환 그래프[노드-엣지]).

    : 사용하기 쉬움

    : 즉시 실행

    : 설계 구현 용이성

    : 데이터 파이프라인 단순화

TensorFlow2 API

Sequential

: 입력부터 출력까지 레이어를 차곡 차곡 쌓는다.

: 입력 1개, 출력 1개일 때만 이용

Codes of MNIST and CIFAR -10

https://github.com/qsdcfd/study-39/blob/main/Sequential%20API%20-MNIST%2C%20CIFAR-10.ipynb

Functional

: keras.Model을 사용하기에 일반적인 접근이다.

: 더 자유로운 모델링이 가능하다

: 입출력 규정을 통해 모델 전체를 규정(함수형으로 모델 구성)

: 다중입력/출력 가능.

Codes of MNIST and CIFAR -10

https://github.com/qsdcfd/study-39/blob/main/Functional%20API-MINST%2C%20CIFAR10.ipynb

Subclassing

: 자유로운 모델링 가능

: Functional의 접근과 큰 차이가 없다.

: 복잡한 모델링을 구현할 때 주로 쓰임

Codes of MNIST and CIFAR -10

https://github.com/qsdcfd/study-39/blob/main/Subclassing%20API-MINST%2C%20CIFAR10.ipynb

회고 아닌 회고

사실 Functional, Subclassing, Sequential은 다 다른 용도로 쓰이지만 공통점들이 있음을 알아냈곤 본질적으로 큰 차이가 없어보였습니다. 그 이유는 모델 학습할 때 동일하게 동일 조건으로 했기 때문이라고 저는 생각을 합니다. 허나 그럼에도 값의 차이들은 분명했죠

GradientTape

  • tf.gradientTape
    : forward pass -> 중간 레이어 값을 Tap에 기록 -> gradient 계산 -> tape 폐기

: model.compile() 와 model.fit() 안에 감춰진 한 스텝을 꺼내어 자유롭게 원하는대로 구성이 가능하다.

: 강화학습이나 GAN학습에서 주로 쓰이는 기법으로 중요하다

: Subclassing 모델 작성법과 동일하지만 좀 더 효율적으로 쓰기 위해 메소드 추가

-> model.compile() , model.fit()

  • model.fit()

    :Forward Propagation 수행 및 중간 레이어 저장

    : Loss 값 계산

    : 중간 레이어 값 & Loss -> chain rule (backward Propagation)

    : 학습 파라미터 업데이트

  • model.compile()

    : loss, optimizer지정 -> 내부적으로 학습이 진행됨

    : loss 및 gradient가 어떻게 학습 파라미터를 업데이트 하게 되는지 지정해주는 작업

-tape.gradient()

: 매 스텝 학습이 진행 후 발생하는 gradient 추출.

: optimizer.apply_gradient()- 추출한 gradient 업데이트 해야할 파라미터 지정

: model.trainable_variables - 업데이트할 파라미터

  • def train_model () = model.fit()

: 이것이 바로 Tensorflow의 위력이다. 함수로 구현한 후 메소드를 만들어야하는 번거로움을 줄여주고 한 줄로 해결하게 한다.

코드로 보여주기

https://github.com/qsdcfd/study-39/blob/main/Gradient%20Tape.ipynb

profile
성장을 도울 아카이빙 블로그

0개의 댓글