Предположим, у нас есть проблема, когда у нас есть 100 изображений и размер пакета 15. У нас есть 15 изображений во всех пакетах, кроме нашего последнего пакета, который содержит 10 изображений.
Предположим, у нас есть сетевое обучение как:
network = Network()
optimizer = optim.Adam(network.parameters(),lr=0.001)
for epoch in range(5):
total_loss = 0
train_loader = torch.utils.data.DataLoader(train_set,batch_size=15)
for batch in train_loader:
images,labels = batch
pred = network(images)
loss = F.cross_entropy(pred,labels)
optimizer.zero_grad()
loss.backward()
optimizer.step()
total_loss+= loss.item()*15
Разве последняя партия не должна всегда давать нам увеличенное значение loss
, потому что мы будем умножать на 15, где мы должны были умножить на 10 в последней партии? Разве это не должно быть total_loss+= loss.item()*len(images)
вместо 15 или batch_size
??
Можем ли мы использовать
for every epoch:
for every batch:
loss = F.cross_entropy(pred,labels,reduction='sum')
total_loss+=loss.item()
avg_loss_per_epoch = (total_loss/len(train_set))
Может кто-нибудь объяснить, пожалуйста, умножение на batch_size
хорошая идея и как я ошибаюсь?