Если я хорошо понимаю, вы хотите вычислить потерю L1 вашей модели (как вы говорите в начале). Однако я думаю, что вы могли запутаться в обсуждении на форуме pytorch.
Насколько я понимаю, на форумах Pytorch и в опубликованном вами коде автор пытается нормализовать веса сети с помощью регуляризации L1. Таким образом, он пытается обеспечить, чтобы значения весов попадали в разумный диапазон (не слишком большой, не слишком маленький). Это нормализация весов с использованием нормализации L1 (поэтому используется model.parameters()
). Нормализация принимает значение на входе и производит нормализованное значение на выходе. Проверьте это для нормализации весов: https://pytorch.org/docs/master/generated/torch.nn.utils.weight_norm.html
С другой стороны, L1 Loss - это просто способ определить, как 2 значения отличаются друг от друга, поэтому "потеря" просто мера этой разницы. В случае потери L1 эта ошибка вычисляется с помощью средней абсолютной ошибки loss = |x-y|
, где x
и y
- значения для сравнения. Таким образом, вычисление ошибок принимает 2 значения на входе и производит значение на выходе. Проверьте это для вычисления потерь: https://pytorch.org/docs/master/generated/torch.nn.L1Loss.html
Чтобы ответить на ваш вопрос: нет, приведенные выше фрагменты не эквивалентны, поскольку первый пытается выполнить нормализацию весов, а второй - вы пытаются подсчитать убыток. Это будет вычисление потерь с некоторым контекстом:
sample, target = dataset[i]
target_predicted = model(sample)
loss = torch.nn.L1Loss()
loss_value = loss(target, target_predicted)