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으로 나눠야 하는거 아닌가요? 지금 좀 헷갈립니다…ㅠㅠ