Función PyTorch torch.nn.MSELoss

PyTorch torch.nn 参考手册Manual de referencia de PyTorch torch.nn


torch.nn.MSELossEs la función de pérdida de error cuadrático medio en PyTorch.

Calcula la media de los cuadrados de las diferencias entre los valores predichos y los valores objetivo, comúnmente utilizada en tareas de regresión.

Definición de la función

torch.nn.MSELoss(reduction='mean')

Descripción de parámetros:

  • reduction(str): Modo de agregación de pérdida. Opciones'mean'、'sum'、'none'. El valor predeterminado es'mean'。

Principio matemático

Fórmula de pérdida MSE:

MSE = (1/n) * Σ(y_pred - y_true)²

Ejemplos de uso

Ejemplo 1: Uso básico

Calcular la pérdida de regresión:

Ejemplo

import torch
import torch.nn as nn

# Crear la pérdida MSE
criterion = nn.MSELoss()

# Valores predichos y valores reales
predictions = torch.tensor([3.0, 4.0, 5.0])
targets = torch.tensor([2.8, 4.2, 4.9])

# Calcular la pérdida
loss = criterion(predictions, targets)

print("Valores predichos:", predictions.tolist())
print("Valores objetivo:", targets.tolist())
print("Pérdida MSE:", loss.item())

# Verificación manual
manual_mse = ((predictions - targets) ** 2).mean()
print("Cálculo manual:", manual_mse.item())

Ejemplo 2: Entrenamiento de regresión completo

Flujo de entrenamiento para tareas de regresión:

Ejemplo

import torch
import torch.nn as nn
import torch.optim as optim

# Modelo de regresión simple
class RegressionNet(nn.Module):
    def __init__(self):
        super(RegressionNet, self).__init__()
        self.fc = nn.Linear(10, 1)

    def forward(self, x):
        return self.fc(x)

model = RegressionNet()
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.01)

# Datos de entrenamiento
X = torch.randn(100, 10)
y = torch.randn(100, 1)

# Pasos de entrenamiento
model.train()
optimizer.zero_grad()
predictions = model(X)
loss = criterion(predictions, y)
loss.backward()
optimizer.step()

print("Pérdida de entrenamiento:", loss.item())

Ejemplo 3: Parámetro reduction

Diferentes modos de agregación:

Ejemplo

import torch
import torch.nn as nn

pred = torch.tensor([3.0, 4.0, 5.0, 6.0])
target = torch.tensor([3.5, 3.8, 5.2, 5.5])

# mean: pérdida promedio
loss_mean = nn.MSELoss(reduction='mean')(pred, target)

# sum: pérdida total
loss_sum = nn.MSELoss(reduction='sum')(pred, target)

# none: sin agregación
loss_none = nn.MSELoss(reduction='none')(pred, target)

print("Mean:", loss_mean.item())
print("Sum:", loss_sum.item())
print("None:", loss_none.tolist())

Ejemplo 4: Manejo de salidas multidimensionales

Regresión multidimensional:

Ejemplo

import torch
import torch.nn as nn

# Salida multidimensional
pred = torch.randn(4, 3)  # batch=4, 3 salidas
target = torch.randn(4, 3)

criterion = nn.MSELoss()
loss = criterion(pred, target)

print("Forma de la predicción:", pred.shape)
print("Forma del objetivo:", target.shape)
print("Pérdida MSE:", loss.item())

Preguntas frecuentes

Q1: ¿Cuál es mejor, MSE o MAE?

  • MSE: sensible a valores atípicos, gradiente estable
  • MAE (L1): robusto a valores atípicos, gradiente inestable

Q2: ¿Se puede usar MSE si la salida tiene valores negativos?

Sí, MSE no limita el rango de salida.

Q3: ¿Qué pérdida se usa para tareas de clasificación?

Para tareas de clasificación se usa CrossEntropyLoss.


Escenarios de uso

nn.MSELossLos principales escenarios de aplicación incluyen:

  • Tareas de regresión: predicción de precios de viviendas, estimación numérica
  • Predicción de valores continuos: seguimiento de objetos
  • Modelos generativos: algunas pérdidas de VAE, GAN

PyTorch torch.nn 参考手册Manual de referencia de PyTorch torch.nn

Otras extensiones