이 사진에서 보이는 것처럼 시계열 데이터를 288데이터마다 끊어서 하나의 sequence를 만들려고 했습니다. 그러다 이 코드의 결과물이 전체 데이터를 거치는 것이 아닌 첫번째 데이터셋(처음 288개 데이터)를 가지고 학습을 하는 것을 발견했습니다.
이와 같이 dataloader를 이용해서 코드를 돌리면 첫번째 288개의 데이터만 가지고 해서 __getitem__에서 idx를 주는 것이 2차원 매트릭스 형태로 make_sequence를 하면서 만들어질텐데 idx가 하나만 주어져서 전체 데이터를 다 돌고 있지 않은 것 같았습니다.
먼저 코드는 이미지보다는 (```으로 감싸는) 코드 블럭으로 공유해주시면 다른 분들께서 재현해보시는데 좋을 것 같습니다.
질문을 정확히 이해했는지 자신이 없는데요, 대략 만드신 CustomDataset으로부터 만든 DataLoader에서 x_train 값이 제대로 불려오지 않는다는 것으로 이해했습니다. 제가 이해한게 맞을까요?
만드신 CustomDataset은 label이 없이, csv에서 읽어온 scalar 값으로부터 sequence를 만들어 반환하는 것으로 보입니다. Dataset에서 label없이 data만 반환하는 것도 가능하지만, 이렇게 반환하는 경우에는 Dataloader 또한 label없이 __getitem__()으로부터 반환된 data만 넘겨주게 됩니다.
즉, 위 코드, 두번째 이미지의 samples는 dataloader로부터 2개(batch_size=2)의
(label이 없는) data(=CustomDataset의 self.train_data_final)만 넘겨받고 있습니다.
따라서 samples를 x_train과 _으로 언패킹(unpacking)할 때 에러가 발생해야 하는데, 마침 batch_size가 2이기 때문에 각각의 데이터가 x_train과 _으로 나뉘어 (에러 없이) 할당되면서 말씀하신 문제 상황이 발생하는 것으로 보입니다. (이해가 어려우시면 DataLoader에서 batch_size를 2가 아닌 다른 값으로 바꿔보시면 될 것 같습니다. )
해결을 위해서는 (1) samples를 따로 unpack하지 않고 바로 x_train에 할당하는 방법과 (2) CustomDataset의 __getitem__()에서 label을 함께 반환하도록 한 뒤 위 코드 처럼 unpack하는 방법이 있을 것 같습니다.