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 |