#python #deep-learning #neural-network #pytorch #tensor
Вопрос:
Я столкнулся с этой ошибкой во время обучения своей нейронной сети в pytorch. Я пытаюсь передать изображения размером 48*48 в формате Bamp;W, которые имеют только 3 функции. Как вы можете видеть здесь:
torch.Size([3, 48, 48]) 0
Я не уверен, насколько это актуально, но у меня есть 1000 различных изображений для обучения, а также 1000 для проверки.
Я новичок в этом, поэтому моя модель довольно проста. Это модель, которую я написал:
model.fc = nn.Sequential(nn.Linear(2304, 100), nn.Linear(100, 50), nn.Linear(50, 20), nn.Linear(20, 3), nn.ReLU(), nn.LogSoftmax(dim=1)) # criterion = nn.NLLLoss() criterion = nn.CrossEntropyLoss() #NLLLoss() lr = 0.001 optimizer = optim.Adam(model.fc.parameters(), lr) model.to(device)
Всякий раз, когда я тренируюсь с помощью функции следующего поезда, я получаю следующую ошибку:
def train(epochs): # epochs = 10 steps = 0 running_loss = 0 print_every = 10 train_losses, val_losses = [], [] # start timeit starttime = timeit.default_timer() print(epochs) for epoch in range(epochs): for inputs, labels in train_dataloader: steps = 1 inputs, labels = inputs.to(device), labels.to(device) optimizer.zero_grad() logps = model.forward(inputs) loss = criterion(logps, labels) loss.backward() optimizer.step() running_loss = loss.item() if steps % print_every == 0: val_loss = 0 accuracy = 0 model.eval() with torch.no_grad(): for inputs, labels in val_dataloader: inputs, labels = inputs.to(device),labels.to(device) logps = model.forward(inputs) batch_loss = criterion(logps, labels) val_loss = batch_loss.item() ps = torch.exp(logps) top_p, top_class = ps.topk(1, dim=1) equals = top_class == labels.view(*top_class.shape) accuracy =torch.mean(equals.type(torch.FloatTensor)).item() train_losses.append(running_loss/len(train_dataloader)) val_losses.append(val_loss/len(val_dataloader)) print(f"Epoch {epoch 1}/{epochs}.. " f"Train loss: {running_loss/print_every:.3f}.. " f"Val loss: {val_loss/len(val_dataloader):.3f}.. " f"Val accuracy: {accuracy/len(val_dataloader):.3f}") running_loss = 0 model.train() torch.save(model, 'aerialmodel.pth') print("Training took:", round(timeit.default_timer() - starttime, 3), "s.") print(epochs, "epochs") print("Learning rate:", lr) print(f"Val accuracy: {accuracy/len(val_dataloader):.3f}")
Ошибка:
/usr/local/lib/python3.7/dist-packages/torch/autograd/__init__.py in backward(tensors, grad_tensors, retain_graph, create_graph, grad_variables, inputs) 147 Variable._execution_engine.run_backward( 148 tensors, grad_tensors_, retain_graph, create_graph, inputs, --gt; 149 allow_unreachable=True, accumulate_grad=True) # allow_unreachable flag 150 151 RuntimeError: Function AddmmBackward returned an invalid gradient at index 2 - got [2048, 100] but expected shape compatible with [2304, 100]
Любая помощь приветствуется! Большое спасибо!
Комментарии:
1. Я не вижу, чтобы вы выравнивали входные данные, как
inputs.view(3, -1)
это требуется здесь. Ты делаешь это в своемforward()
? Вы не дали своегоforward()
определения, поэтому не уверены.