Я читаю публикацию О'Рейли за сентябрь 2019 года «Программирование Pytorch ..», описывающую простую линейную нейронную сеть для классификации изображений.
В открывающей модели есть ошибка в имени переменной (нетбеспокоит) target
против targets
, однако есть то, что кажется странным упущением объявления переменной, train_iterator
(а также dev_iterator
, не показано).
Я хочу знатьЧто это была за переменная train_iterator
, которую они (я предполагаю) намеревались?
p27
def train(model, optimiser, loss_fn, train_loader, val_loader, epochs=20, device='cpu'):
for epoch in range(epochs):
training_loss = 0.0
valid_loss = 0.0
model.train()
for batch in train_loader:
optimizer.zero_grad()
inputs, target = batch # Bug here for 'target'
inputs = inputs.to(device)
target = targets.to(device)
output = model(inputs)
loss = loss_fin(output, target)
loss.backward()
optimizer.step()
training_loss += loss.data.item()
training_loss /= len(train_iterator) # What is train_iterator?
, поэтому,
inputs, target = batch
должно быть
inputs, targets = batch
На шаге проверки ниже шага обучения (не показан):
inputs, targets = batch
...
targets = targets.to(device)
Это не важно, а код просто присваивается Cudas (GPU) или CPU.
Переменная train_iterator
определяет потерю тренировки (важная диагностика). Я предполагаю, что между эпохой и пакетным итератором должен быть объявлен итератор, или это в обучающем цикле?
Примечания train_loader
просто ссылается на загрузчик данных Pytorch. Модель относится к 3 линейным слоям с функцией активации ReLU.