(Pytorch) 기본

꼼댕이·2022년 9월 27일
0

pytorch

목록 보기
1/7

Pytorch VS Tensorflow

딥러닝 프레임워크의 최대 장점은 AutoGrad(자동미분)이다

  • Tensorflow는 Google에서 만들어졌고 pytorch는 Facebook에서 만들어짐
  • PyTorch를 정의하면 Numpy+AutoGrad+FunctionNumpy + AutoGrad + Function으로 볼 수 있음
  • Tensorflow는 Static Graphs(Define And Run)방식
  • Pytorch는 Dynamic Computing Graph(Define By Run)방식

Computing Graph는 아래와 같이 연산과정을 그래프로 나타내는 것을 의미하는데

Tensorflow는 Static Graphs(Define And Run)방식으로 방식으로 진행한다.
Define And Run이란 실행 시점에 데이터를 feed하는 것을 의미하며 모든 데이터가 올라온 뒤에 디버깅할 수 있다는 단점이 있다. ( feed = 데이터를 넣어주는 작업 )

반면 Pytorch는 Dynamic Computing Graph(Define By Run)방식으로 진행한다.
Define By Run은 실행을 하면서 graph를 생성하기 때문에 실행하는 과정을 디버깅 할 수 있다는 장점이 있다.

PyTorch 함수

GPU 사용

  • torch의 Tensor는 gpu에 올려서 사용이 가능하다
x_data = torch.tensor([1.])
model = torch.nn.Linear()
if torch.cuda.is_available():
	x_data_cuda = x_data.cuda()

view

  • 차원을 바꿔준다(reshape와 같은 기능)
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는 copy가 아니라 기존의 메모리 주소를 그대로 이용해서(memory shared) 표현..
  • 형태만 바꿔줌
    단 reshape은 차원을 바꿨을 때 기존 차원형태를 보장해주지 않는 반면 view는 보장해주는 차이가 있음

가급적이면 view 권장

squeeze & unsqueeze

  • 1차원을 삭제하거나 늘려준다
A = torch.Tensor([[2]])
# A.squeeze()
# A.unsqueeze(2)

mm vs matmul

가급적이면 mm 사용
mm

  • scalar|vector 간의 연산은 불가능하고 오직 행렬간의 연산만 가능
  • broadcasting (X)

matmul

  • scalar|vector 간의 연산 가능 & 행렬간의 연산 가능
  • broadcasting (O)

broadcasting으로 인해 오히려 결과값에 혼동을 불러 일으킬 수 있다.
(※broadcasting : 행렬간의 차원이 맞지 않아 계산이 되면 안되는데 이를 자동적으로 맞춰줘서 계산 가능하게 하는것)


참고

모든 이미지는 부스트캠프 AI Tech교육 자료를 참고

profile
사람을 연구하는 공돌이

0개의 댓글