pytorch 또한 tensorflow와 같이 텐서의 연산으로 이루어짐

둘 다 numpy 행렬을 주로 사용함


tensorflow는 연산 전에 미리 노드 그래프를 만듦

pytorch는 동적으로 그래프를 만듦

이러한 차이로, pytorch는 print 문을 이용하여 tensor들의 값을 출력할 수 있음 (tensorflow에서 eval 함수와 비슷)


pytorch에는 일반 Tensor (e.g. torch.cuda.FloatTensor)와 Variable (e.g. torch.autograd.variable.Variable)이 있는데,

Tensor에 유틸기능을 씌운 것을 Variable로 볼 수 있음. (기울기 계산 등의 연산을 쉽게 수행)

기본적으로 Tensor와 Variable끼리의 연산은 불가하다.

Variable(Tensor)로 Variable을 만들 수 있고,

반대로 Variable.data로 Tensor를 꺼낼 수 있음


서로 다른 클래스(타입)의 텐서 끼리는 연산할 수 없음 (DoubleTensor * FloatTensor = 에러, 형변환 필요)

Tensor * Tensor 등의 사칙연산은 Tensor.mul(Tensor) 등으로 자동 치환됨


torch.from_numpy() : numpy -> Tensor (numpy가 float이나, double일 때 DoubleTensor가 되고, int일 때 LongTensor가 된다.)

Tensor.float() : FloatTensor로 캐스팅


Tensor.size() : 텐서의 shape을 출력. (tensorflow에서 tf.shape() or get_shape())

F.cross_entropy() : 자체적으로 softmax를 포함한다.

Tensor.cuda() : GPU로 데이터를 올림 (cuda에 올라간 데이터는 gpu연산을 수행)

Tensor.cpu() : CPU로 데이터를 올림




---

dataloader 정의 시

pin_memory는 메모리 사용량과 관계없음


test 시 입력 Variable에 volatile=True 인자를 추가해줘야함. (추가 안하면 메모리가 폭발함. 안쓴거랑 3000메가 정도 차이나는 경우도 봤음)


'실습 > pytorch' 카테고리의 다른 글

load_state_dict 성능 문제, [nn.ModuleList]  (2) 2018.11.08
Pytorch eval 성능 문제  (0) 2018.11.08
PyTorch GPU check  (1) 2018.08.29

+ Recent posts