[Pytorch] Dataset과 Dataloader 1(Basic)
·
Pytorch
custom Dataset과 Dataloader에 대해 설명하기 전에 pytorch에서 제공하는 Dataset과 Dataloader의 기본적인 사용법 부터 설명하도록 하겠습니다. ​ 파이토치에서는 데이터를 좀 더 편리하게 다룰 수 있도록 데이터셋(Dataset)과 데이터로더(DataLoader)라는 모듈을 기본적으로 제공합니다. 이를 사용하면 batch size 설정, 데이터 셔플(shuffle, 랜덤하게 데이터를 전달), 병렬 처리까지 파라미터로 간단히 조절하여 수행하는 것이 가능해집니다. 기본적인 사용 방법은 Dataset을 정의하고, 이를 DataLoader에 전달하는 것입니다. 간단한 사용법을 설명하기 위해 Float형 텐서를 입력받아 Dataset의 형태로 변환해주는 TensorDataset을 ..
[Pytorch] cross entropy loss 에 3차원 input 사용하기
·
Pytorch
분류기를 통과한 후 나온 현재 tensor의 구조는 다음과 같습니다. (batch_size, max_len, num_classes) 이를 아래와 같은 순서로 변경해주어야 합니다. (batch_size, num_classes, max_len) 참고 사이트에 따르면 두번째 자리에 항상 클래스 수가 와야 합니다. ​ 참고: https://stackoverflow.com/questions/63648735/pytorch-crossentropy-loss-with-3d-input Pytorch crossentropy loss with 3d input I have a network which outputs a 3D tensor of size (batch_size, max_len, num_classes). My grou..
RuntimeError: view size is not compatible with input tensor's size and stride ~
·
Error Note
- 전체 에러 문구 RuntimeError: view size is not compatible with input tensor's size and stride (at least one dimension spans across two contiguous subspaces). Use .reshape(...) instead. ​ expand(), view(), transpose() 등의 함수를 이용해 텐서의 모양을 바꿀 때 새로운 텐서를 생성하는 것이 아니라, 저장된 메모리의 주소는 그대로 둔체 텐서의 모양만 바꾸게 됩니다. 이런 경우 메모리 주소가 연속적이지 않게 변하게되므로 발생하는 에러입니다. ​ ​ - 해결 방법 연속적이지 않은 메모리 주소를 연속적이게 만들어주면 됩니다. 1) contiguous() ..
RuntimeError: grad can be implicitly created only for scalar outputs
·
Error Note
- 전체 에러 문구 RuntimeError: grad can be implicitly created only for scalar outputs ​ 파이토치에서 모델 학습 중 backporpagation을 시도하는 도중에 발생하는 에러입니다. loss.backward()는 기본적으로 1개의 스칼라 데이터에 대해 backporpagation를 수행하도록 되어있습니다. 그러나, loss 변수 내에는 배치에 포함된 모든 데이터 각각에 대한 loss 가 저장되어 있습니다. 이 값들을 sum이나 mean을 통해 하나로 합쳐주어야 합니다. ​ ​ ​ - 해결 방법 배치 안에 포함된 모든 데이터들에 대한 loss를 모아서 역전파를 수행해야하기 때문에, sum이나 mean을 통해서 값을 하나로 만들어 주면 됩니다. lo..