최대 1 분 소요

pytorch : numpy + auto grad

tensor

numpy에서 ndarray가 pytorch에서는 tensor라는 객체로 사용 됨.

import torch
t_array = torch.FloatTensor(n_array)

torch.from_numpy 

pytorch의 tensor는 gpu에 올려서 사용가능

if torch.cuda.is_available():
	x_data_cuda = x_data.to(cuda)
x_data_cuda.device

# device(type = ‘cuda’, index = 0)

tensor handling

  • view: reshape 대신에 쓴다고 생각하면 됨

*view와 reshape의 차이점 view는 주소를 받아와서 쓰기 때문에 기존 값이 바뀌면 같이 바뀜 replace는 값을 받아와서 쓰기 때문에 기존값이 바뀌어도 안바뀜

tip) view를 써라

  • squeeze,unsqueeze : 1차원 삭제,추가
tensor_ex.unsqueeze(0)

tensor_ex.unsqueeze(1)

tensor_ex.unsqueeze(2)

tensor operation

대부분의 것들이 numpy와 비슷하게 이루어짐

행렬곱셈 연산은 dot이 아니라 mm (matmul) 사용 둘다 벡터라 내적구할때는 dot 써도 되는데 행렬곱셈 연산은 mm 사용해야함

tip) mm을 쓰자

*mm과 matmul은 broadcasting 지원 차이 matmul은 broadcasting 지원되서 웬만하면 돌아감

tensor operations for ml/dl


import torch
import torch.nn.functional as F

tensor = torch.FloatTensor([0.5,0.7,0.1])
h_tensor = F.softmax(tensor, dim =0)

쓸 때마다 찾아서 쓰도록

autograd

파이토치 핵심은 자동 미분 지원 -> backward 함수 사용

w = torch.tensor(2.0, requires_grad = True)
y = w**2
z = 10*y +25
z.backward()
w.grad

편미분

a = torch.tensor([2., 3.], requires_grad=True)
b = torch.tensor([6., 4.], requires_grad=True)
Q = 3*a**3 - b**2
external_grad = torch.tensor([1., 1.])

#external_grad : 편미분 하는거 인듯
Q.backward(gradient=external_grad)

a.grad 

카테고리:

업데이트:

댓글남기기