Проблемы с циклом обучения при создании моего рукописного проектаPython

Программы на Python
Anonymous
Проблемы с циклом обучения при создании моего рукописного проекта

Сообщение Anonymous »

def validate(model, val_dataloader, критерий):
model.eval()
val_loss = 0.0

Код: Выделить всё

with torch.no_grad():
for images, labels in val_dataloader:
outputs = model(images)
loss = criterion(outputs.view(-1, outputs.size(-1)), labels.view(-1))
val_loss += loss.item()

avg_val_loss = val_loss / len(val_dataloader)
return avg_val_loss
def test(model, test_dataloader, критерий):
model.eval()
test_loss = 0.0

Код: Выделить всё

with torch.no_grad():
for images, labels in test_dataloader:
outputs = model(images)
loss = criterion(outputs.view(-1, outputs.size(-1)), labels.view(-1))
test_loss += loss.item()

avg_test_loss = test_loss / len(test_dataloader)
print(f"Test Loss: {avg_test_loss:.4f}")
def train(model, train_dataloader, val_dataloader, критерий, оптимизатор, num_epochs):
для эпохи в диапазоне (num_epochs):
model.train()
running_loss = 0,0

Код: Выделить всё

    for images, labels in train_dataloader:
optimizer.zero_grad()
outputs = model(images)
loss = criterion(outputs.view(-1, outputs.size(-1)), labels.view(-1))
loss.backward()
optimizer.step()
running_loss += loss.item()

avg_train_loss = running_loss / len(train_dataloader)
avg_val_loss = validate(model, val_dataloader, criterion)
print(f'Epoch [{epoch+1}/{num_epochs}], Train Loss: {avg_train_loss:.4f}, Val Loss: {avg_val_loss:.4f}')
num_epochs = 20
train(model, train_dataloader, val_dataloader, критерий, оптимизатор, num_epochs)
test(model, test_dataloader, критерий)
мои ожидаемые результаты...я получаю ошибку времени выполнения и ошибку тензорной строки

RuntimeError Traceback (последний вызов последний)
Ячейка In[20], строка 58
56 # Начать обучение
57 num_epochs = 10
---> 58 train(model, train_dataloader, val_dataloader, критерий, оптимизатор, num_epochs )
60 # После обучения оцените модель на тестовом наборе
61 test(model, test_dataloader, критерий)
Cell In[20], строка 40, in train(model, train_dataloader, val_dataloader, критерий, оптимизатор, num_epochs)
38 # Прямой проход
39 выходы = модель(изображения)
---> 40 потери = критерий(outputs.view (-1, outputs.size(-1)), labels.view(-1)) # Изменение формы для вычисления потерь
42 # Обратный проход и оптимизация
43 loss.backward()
Файл ~\anaconda3\envs\monai\lib\site-packages\torch\nn\modules\module.py:1553, в Module._wrapped_call_impl(self, *args, **kwargs)
1551 return self._compiled_call_impl(*args, **kwargs) # тип: ignore[misc]
1552 else:
-> 1553 return self._call_impl(*args, **kwargs)
Файл ~\anaconda3\envs\monai\lib\site-packages\torch\nn\modules\module.py:1562, в Module._call_impl(self, *args, **kwargs)
1557 # Если у нас нет никаких перехватчиков, мы хотим пропустить остальную логику в
1558 # этой функции и просто вызвать переадресацию.
1559 если нет (self._backward_hooks или self._backward_pre_hooks или self._forward_hooks или self._forward_pre_hooks
1560 или _global_backward_pre_hooks или _global_backward_hooks
1561 или _global_forward_hooks или _global_forward_pre_hooks):
-> 1562 return front_call(*args) , **кварги)1564 попытка:
1565 результат = Нет
Файл ~\anaconda3\envs\monai\lib\site-packages\torch\nn\modules\loss.py: 101, в L1Loss.forward(self, input, target)
100 def вперед(self, input: Tensor, target: Tensor) -> Tensor:
--> 101 return F.l1_loss(input, цель, сокращение = self.reduction)
Файл ~\anaconda3\envs\monai\lib\site-packages\torch\nn\functional.py:3353, в l1_loss(input, target , size_average, уменьшить, уменьшение)
3350, если size_average не имеет значения None или уменьшить не имеет значения None:
3351 сокращение = _Reduction.legacy_get_string(size_average, уменьшить)
-> 3353 расширенный_вход, расширенная_цель = факел .broadcast_tensors(input, target)
3354 return torch._C._nn.l1_loss(expanded_input,expanded_target, _Reduction.get_enum(reduction))
Файл ~\anaconda3\envs\ monai\lib\site-packages\torch\functional.py:77, в Broadcast_tensors(*tensors)
75 if has_torch_function(tensors):
76 return handle_torch_function(broadcast_tensors, tensors, *tensors)
---> 77 return _VF.broadcast_tensors(tensors)
RuntimeError: размер тензора a (36) должен совпадать с размером тензора b (32) в неодноэлементном измерении 1

Подробнее здесь: https://stackoverflow.com/questions/790 ... en-project

Вернуться в «Python»