728x90
반응형
일반적인 딥러닝 프레임워크에 대한 기본적인 개념.
Tensorflow는 Computational graph를 그리는 것이 특징
Computational graph는 상대적으로 low level이다.
Keras : Tensorflow를 backend로 해서 computational graph를 알아서 만들어준다.
먼저 레이어의 시퀀스로 모델을 구성한다.
model.fit을 하면 전체 학습 과정이 알아서 진행된다.
Pytorch 는 tensorflow와 다르다. 세 가지 추상화 레벨을 정의해 놓았다.
Dtype을 floattensor에서 cuda.floattensor 로 바꿔주면 GPU에서 실행할 수 있다.
Numpy + GPU 같다.
Tensorflow의 경우에는 그래프를 “명시적으로” 구성한 다음에 그 그래프를 실행한 것이고,
Pytorch의 경우에는 forward pass 할 때 마다 매번 그래프를 다시 구성한다.
Tensorflow처럼 그래프를 구성하고 실행하는 것을 static computational graph 라고 한다. 그래프가 단 하나만 고정적으로 존재하기 때문이다.
하지만 Pytorch의 경우에는 forward pass 할 때 마다 매번 새로운 그래프를 다시 구성한다.
이를 dynamic computational graph이라고 한다.
Static graphs에는 그래프를 최적화시킬 수 있는 여지가 주어진다 ( 텐서플로 )
Dynamic graph에서는 그러기 힘들다.
static은 코드 없이도 만들어둔 모델을 이용(재사용)할 수 있다. dynamic은 코드가 항상 존재해야한다.
tensorflow에서 조건문 만들기가 힘들다. 그래프를 만들어놔야 하기 때문이다.
pytorch는 그냥 for문 이용하면 됨. 하지만 tensorflow는 명시적으로 loop를 넣어줘야함.
Image captioning 에서 dynamic graph를 필요로 한다. sequence가 얼마나 될지 모르기 때문이다. (RNN에서 보통 dynamic graph를 필요로함 )
728x90
반응형