Fonction PyTorch torch.nn.MSELoss
Manuel de référence torch.nn de PyTorch
torch.nn.MSELossC'est la fonction de perte d'erreur quadratique moyenne dans PyTorch.
Elle calcule la moyenne des différences au carré entre les valeurs prédites et les valeurs cibles, couramment utilisée dans les tâches de régression.
Définition de fonction
torch.nn.MSELoss(reduction='mean')
Description des paramètres :
reduction(str) : Méthode d'agrégation de la perte. Facultatif'mean'、'sum'、'none'. La valeur par défaut est'mean'。
Principe mathématique
Formule de perte MSE :
MSE = (1/n) * Σ(y_pred - y_true)²
Exemples d'utilisation
Exemple 1 : Utilisation de base
Calculer la perte de régression :
Exemple
import torch
import torch.nn as nn
# Créer la perte MSE
criterion = nn.MSELoss()
# Valeurs prédites et valeurs réelles
predictions = torch.tensor([3.0, 4.0, 5.0])
targets = torch.tensor([2.8, 4.2, 4.9])
# Calculer la perte
loss = criterion(predictions, targets)
print("Valeurs prédites :", predictions.tolist())
print("Valeurs cibles :", targets.tolist())
print("Perte MSE :", loss.item())
# Vérification manuelle
manual_mse = ((predictions - targets) ** 2).mean()
print("Calcul manuel :", manual_mse.item())
import torch.nn as nn
# Créer la perte MSE
criterion = nn.MSELoss()
# Valeurs prédites et valeurs réelles
predictions = torch.tensor([3.0, 4.0, 5.0])
targets = torch.tensor([2.8, 4.2, 4.9])
# Calculer la perte
loss = criterion(predictions, targets)
print("Valeurs prédites :", predictions.tolist())
print("Valeurs cibles :", targets.tolist())
print("Perte MSE :", loss.item())
# Vérification manuelle
manual_mse = ((predictions - targets) ** 2).mean()
print("Calcul manuel :", manual_mse.item())
Exemple 2 : entraînement complet d'un modèle de régression
Processus d'entraînement de la tâche de régression :
Exemple
import torch
import torch.nn as nn
import torch.optim as optim
# Modèle de régression 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)
# Données d'entraînement
X = torch.randn(100, 10)
y = torch.randn(100, 1)
# Étapes d'entraînement
model.train()
optimizer.zero_grad()
predictions = model(X)
loss = criterion(predictions, y)
loss.backward()
optimizer.step()
print("Perte d'entraînement :", loss.item())
import torch.nn as nn
import torch.optim as optim
# Modèle de régression 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)
# Données d'entraînement
X = torch.randn(100, 10)
y = torch.randn(100, 1)
# Étapes d'entraînement
model.train()
optimizer.zero_grad()
predictions = model(X)
loss = criterion(predictions, y)
loss.backward()
optimizer.step()
print("Perte d'entraînement :", loss.item())
Exemple 3 : paramètre reduction
Différentes méthodes d'agrégation :
Exemple
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 : perte moyenne
loss_mean = nn.MSELoss(reduction='mean')(pred, target)
# sum : perte totale
loss_sum = nn.MSELoss(reduction='sum')(pred, target)
# none : aucune agrégation
loss_none = nn.MSELoss(reduction='none')(pred, target)
print("Moyenne :", loss_mean.item())
print("Somme :", loss_sum.item())
print("Aucune :", loss_none.tolist())
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 : perte moyenne
loss_mean = nn.MSELoss(reduction='mean')(pred, target)
# sum : perte totale
loss_sum = nn.MSELoss(reduction='sum')(pred, target)
# none : aucune agrégation
loss_none = nn.MSELoss(reduction='none')(pred, target)
print("Moyenne :", loss_mean.item())
print("Somme :", loss_sum.item())
print("Aucune :", loss_none.tolist())
Exemple 4 : gestion de la sortie multidimensionnelle
Régression multidimensionnelle :
Exemple
import torch
import torch.nn as nn
# Sortie multidimensionnelle
pred = torch.randn(4, 3) # batch=4, 3 sorties
target = torch.randn(4, 3)
criterion = nn.MSELoss()
loss = criterion(pred, target)
print("Forme prédite :", pred.shape)
print("Forme cible :", target.shape)
print("Perte MSE :", loss.item())
import torch.nn as nn
# Sortie multidimensionnelle
pred = torch.randn(4, 3) # batch=4, 3 sorties
target = torch.randn(4, 3)
criterion = nn.MSELoss()
loss = criterion(pred, target)
print("Forme prédite :", pred.shape)
print("Forme cible :", target.shape)
print("Perte MSE :", loss.item())
FAQ
Q1 : Qu'est-ce qui est le mieux, MSE ou MAE ?
- MSE : Sensible aux valeurs aberrantes, gradients stables
- MAE (L1) : Robuste aux valeurs aberrantes, gradients instables
Q2 : Peut-on utiliser MSE si les sorties ont des valeurs négatives ?
Oui, MSE ne restreint pas la plage de sortie.
Q3 : Quelle perte est utilisée pour les tâches de classification ?
Utilisez CrossEntropyLoss pour les tâches de classification.
Cas d'utilisation
nn.MSELossLes principaux scénarios d'application incluent :
- Tâches de régression: Prédiction du prix des maisons, estimation numérique
- Prédiction de valeurs continues: Suivi de cible
- Modèles génératifs: Certaines pertes pour VAE, GAN
Autres extensions