딥러닝 프레임워크의 최대 장점은 AutoGrad(자동미분)이다
Computing Graph는 아래와 같이 연산과정을 그래프로 나타내는 것을 의미하는데
Tensorflow는 Static Graphs(Define And Run)방식으로 방식으로 진행한다.
Define And Run이란 실행 시점에 데이터를 feed하는 것을 의미하며 모든 데이터가 올라온 뒤에 디버깅할 수 있다는 단점이 있다. ( feed = 데이터를 넣어주는 작업 )
반면 Pytorch는 Dynamic Computing Graph(Define By Run)방식으로 진행한다.
Define By Run은 실행을 하면서 graph를 생성하기 때문에 실행하는 과정을 디버깅 할 수 있다는 장점이 있다.
x_data = torch.tensor([1.])
model = torch.nn.Linear()
if torch.cuda.is_available():
x_data_cuda = x_data.cuda()
a = torch.zeros([3,2])
b = a.view(2,3) / a.reshape(2,3)
a.fill_(1)
(view) a=[[1,1],
[1,1],
[1,1]]
b=[[1,1,1],
[1,1,1]]
(reshape) a=[[1,1],
[1,1],
1,1]]
b=[[0,0,0],
[0,0,0]]
가급적이면 view 권장
A = torch.Tensor([[2]])
# A.squeeze()
# A.unsqueeze(2)
가급적이면 mm 사용
mm
matmul
broadcasting으로 인해 오히려 결과값에 혼동을 불러 일으킬 수 있다.
(※broadcasting : 행렬간의 차원이 맞지 않아 계산이 되면 안되는데 이를 자동적으로 맞춰줘서 계산 가능하게 하는것)
참고
모든 이미지는 부스트캠프 AI Tech교육 자료를 참고