torch.utils.data.DataLoader 로 load한 데이터들을 확인하고 싶습니다.

import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import torchvision
import torchvision.transforms as transforms
train_set = torchvision.datasets.MNIST(root = './data/MNIST',train = True,download = True,\transform = transfroms.Compose([transfroms.ToTensor()])

print(len(train_set))

>> 60000

train_loader = torch.utils.data.DataLoader(train_set, batch_size=100)
print(len(train_loader))

>> 600

아마 배치사이즈로 인해 length가 줄어들은걸로 보입니다. 그럼 이 녀석의 600이라는 length 중 각각 1개씩은, 100개의 28x28 Tensor들과 Class가 들어있는거 보고 싶습니다. 어떻게 확인할 수 있을까요??

그리고,


### 모델은 생략할게요 ###
model = ConvNet().to(device) 
criterion = nn.CrossEntropyLoss().to(device)
optimizer = torch.optim.Adam(model.parameters(), lr = learning_rate)

for epoch in range(5): 
     avg_cost = 0
    for data, target in train_loader:
        data = data.to(device)
        target = target.to(device)
        optimizer.zero_grad() 
        hypothesis = model(data) 
        cost = criterion(hypothesis, target) 
        cost.backward() 
        optimizer.step() 
        avg_cost += cost / len(train_loader) # loss 값을 변수에 누적하고 train_loader의 개수로 나눔 = 평균

    print('[Epoch: {:>4}] cost = {:>.9}'.format(epoch + 1, avg_cost))

계산을 하는데, 여기서 1 epoch당 6만개의 data를 train 시키는게 맞는건가요? 그렇다면,
avg_cost를 계산할 때 60,000으로 나눠야 하는거 아닌가요? 지금 좀 헷갈립니다…ㅠㅠ

1번 질문 : iterater를 만드신다음에 .next()로 호출 하시면 됩니다.
dataiter = iter(train_loader)
images, labels = dataiter.next()
print(images.shape)
=>> torch.Size([100, 1, 28, 28])

2번 질문
1epoch에서는 6만개를 학습하는게 맞습니다.
다만 1개의 batch에서 100개가 사용되고 사용하신 cost는 100개의 평균이기 때문에
1epoch 동안의 평균 cost를 보시려면 600으로 나누어지는게 맞습니다.