


큰 computational graphs를 쉽게 그릴 수 있음

이미지-랜덤 데이터로 2 layer ReLU network의 L2 loss를 구하는 예시로 기본 구조를 설명
placeholder 함수: 그래프의 입력 노드 역할. 나중에 실제 데이터가 들어올 자리를 마련해줌.
forward pass: 계산식, pred와 loss. x와 w1의 matmul연산과 tf.maximum을 이용해 ReLU를 계산. 그 결과값 h와 w2의 matmul연산으로 예측값을 계산하고 L2 distance를 구함.
values: 1.에서 그린 그래프에 실제 넣을 데이터 입력
out: 계산해서 반환할 값 지정
결과는 numpy array로 반환

weight를 placeholder가 아닌 tf.Variable에 저장하여 GPU메모리에 저장하고 쉽게 불러올 수 있게 한다.
weight 업데이트 또한 computational graph 안에서 연산되도록 해준다.
x, y에 데이터 입력하고 실행
Optimizer

dtype = torch.cuda.FloatTensor를 적용해주면 torch의 tensor로 인식하고 GPU에서 실행. (사진엔 cuda가 없는데 cuda 넣어주면 gpu에서 실행할 수 있음.

Tensorflow는 computational graph를 미리 그리고, 그래프를 실행하는 두 단계로 나뉘고, PyTorch는 그래프를 그리지 않고, forward pass를 할 때마다 새로 그린다. 그래서 코드가 겉으로 보기에 더 깔끔하다.
PyTorch는 자동으로 gradient를 계산하는 AutoGrad함수를 정의할 수 있다. Tensor를 이용해 forward와 backward를 구성하면 알아서 그래프에 넣을 수 있다.
PyTorch의 상위레벨 wrapper로 텐서플로우의 케라스같은 역할

loss 최적화 함수를 사용할 수 있게 해준다. 역시 learning rate같은 하이퍼파라미터는 정해줘야 한다.

파이토치에 nn을 모델처럼 구현시킴. 사용자정의 모델을 이용해서 클래스 형태로 조금더 복잡한 모델 (깊은층)을 만들 수 있다.

데이터셋 불러오기. 미니배치, 셔플, 멀티스레딩을 알아서 해줌.


텐서플로우: static graph을 맨 처음에 구성하고 매 iteration마다 재사용.
파이토치: dynamic graph로 매 iteration을 수행할 때마다 새롭게 computational graph를 생성.
static graph의 장점: 코드가 쉽고 깔끔함.
Dynamic 의 장점:
연구보다 모델 test에 유리함
training, fine tuning에 좋음
static graph 지원
코어는 C++로 작성되어 있고 python interface 지원
텐서플로우는 두루두루 사용하기 좋은 만능 프레임워크.
반면 파이토치는 실험/연구할 때 좋음