* 강사님의 자료는 저작권이 있기 때문에 배운 내용을 최대한 간단하게 정리하는 수준으로 작성하였습니다.
Part 1
PyTorch
- 직관적 인터페이스 제공
- 동적으로 그래프 생성 (vs 정적으로 그래프를 생성하는 Tensorflow)
- 러닝 커브 (배우는 속도)가 낮은편
Tensorflow
- 러닝 커브가 심함
- 기존에 많은 코드가 Tensorflow 기반이므로, 참고자료가 많음
Part 2
Tensor 생성 주요 메서드
- torch.zeros()
- torch.ones()
- torch.rand()
- torch.randn()
- torch.full((), a)
- torch.zeros_like()
- torch.ones_like()
- torch.rand_like()
- torch.randn_like()
- torch.full_like()
- torch.empty()
Torch 데이터 타입
- torch.FloatTensor() → 32-bit floating point
- torch.DoubleTensor() → 64-bit floating point
- torch.HalfTensor() → 16-bit floating point
- torch.LongTensor() → 64-bit integer
- torch.IntTensor() → 32-bit integer
- torch.ShortTensor() → 16-bit integer
Torch 형태, 차원, 데이터 타입 확인하는 방법
- .shape(), .size() → 형태 확인
- .ndim, .dim() → 차원 확인
- .dtype → 데이터 타입 확인
Part 2
Tensor 모양 변형
- .reshape()
- .view() → 파이토치에서 더 자주 쓰임
Tensor 차원 압축
- .squeeze() → 차원이 1인 경우 해당 차원을 제거하는 용도로 사용
- .unsqueeze() → 특정 위치에 1인 차원 추가하기
Part 3
numpy & Pytorch
- pytorch는 numpy의 ndarray를 GPU에서 실행할 수 있도록 개발됨
- tensor와 ndarray 서로 변환 가능
- data2 = torch.from_numpy(data)
- data2.numpy()
브로드 캐스팅
- 모양을 맞추기 위해 확대하여 계산
- 조건
- 각 차원의 원소 수가 똑같거나
- 둘 중의 하나의 차원의 원소 수는 1이거나, 존재하지 않는 경우
텐서 복사
- clone() : 기존 텐서 객체의 내용을 복사한 텐서 생성, 깊은 복사를 하여 저장 공간을 달리함
- detach() : 기존 텐서 객체 그래프에서 분리된 텐서로 생성, clone 한것을 명시적으로 끊어주기 위해
- Tensor가 기록을 추적하는 것을 끊을 수 있음
- 둘이 자주 같이 쓰임
Part 4
Tensor 조건 연산
- torch.where(data < 3) : 조건에 맞는 인덱스 번호 리턴
- torch.where(data3, -1, 1) : 조건에 맞는 값을 특정 다른 값으로 변환
Tensor 파일로 저장하고, 불러오기
- torch.save(data1, 'mydata1.pt') : pt를 많이 이용함
- torch.load('mydata1.pt')
한 개 이상의 Tensor 저장
datas = {'data1' : data1, 'data2' : data2, 'data3' : data3}
torch.save(datas, 'mydata1.pt')
* written on June 27th