PyTorch torch.nn.MSELoss-Funktion
PyTorch torch.nn Referenzhandbuch
torch.nn.MSELossEs ist die Verlustfunktion des mittleren quadratischen Fehlers in PyTorch.
Sie berechnet den Mittelwert der quadrierten Differenzen zwischen vorhergesagten Werten und Zielwerten und wird häufig in Regressionsaufgaben verwendet.
Funktionsdefinition
torch.nn.MSELoss(reduction='mean')
Parameterbeschreibung:
reduction(str): Verlustaggregationsmethode. Optional'mean'、'sum'、'none'. Standardwert ist'mean'。
Mathematisches Prinzip
MSE-Verlustformel:
MSE = (1/n) * Σ(y_pred - y_true)²
Anwendungsbeispiele
Beispiel 1: Grundlegende Verwendung
Regressionsverlust berechnen:
Beispiel
import torch
import torch.nn as nn
# MSE-Verlust erstellen
criterion = nn.MSELoss()
# Vorhergesagte Werte und wahre Werte
predictions = torch.tensor([3.0, 4.0, 5.0])
targets = torch.tensor([2.8, 4.2, 4.9])
# Verlust berechnen
loss = criterion(predictions, targets)
print("Vorhergesagte Werte:", predictions.tolist())
print("Zielwerte:", targets.tolist())
print("MSE-Verlust:", loss.item())
# Manuelle Überprüfung
manual_mse = ((predictions - targets) ** 2).mean()
print("Manuelle Berechnung:", manual_mse.item())
import torch.nn as nn
# MSE-Verlust erstellen
criterion = nn.MSELoss()
# Vorhergesagte Werte und wahre Werte
predictions = torch.tensor([3.0, 4.0, 5.0])
targets = torch.tensor([2.8, 4.2, 4.9])
# Verlust berechnen
loss = criterion(predictions, targets)
print("Vorhergesagte Werte:", predictions.tolist())
print("Zielwerte:", targets.tolist())
print("MSE-Verlust:", loss.item())
# Manuelle Überprüfung
manual_mse = ((predictions - targets) ** 2).mean()
print("Manuelle Berechnung:", manual_mse.item())
Beispiel 2: Vollständiges Regressionstraining
Trainingsprozess für die Regressionsaufgabe:
Beispiel
import torch
import torch.nn as nn
import torch.optim as optim
# Einfaches Regressionsmodell
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)
# Trainingsdaten
X = torch.randn(100, 10)
y = torch.randn(100, 1)
# Trainingsschritte
model.train()
optimizer.zero_grad()
predictions = model(X)
loss = criterion(predictions, y)
loss.backward()
optimizer.step()
print("Trainingsverlust:", loss.item())
import torch.nn as nn
import torch.optim as optim
# Einfaches Regressionsmodell
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)
# Trainingsdaten
X = torch.randn(100, 10)
y = torch.randn(100, 1)
# Trainingsschritte
model.train()
optimizer.zero_grad()
predictions = model(X)
loss = criterion(predictions, y)
loss.backward()
optimizer.step()
print("Trainingsverlust:", loss.item())
Beispiel 3: reduction-Parameter
Verschiedene Aggregationsmethoden:
Beispiel
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: durchschnittlicher Verlust
loss_mean = nn.MSELoss(reduction='mean')(pred, target)
# sum: Gesamtverlust
loss_sum = nn.MSELoss(reduction='sum')(pred, target)
# none: keine Aggregation
loss_none = nn.MSELoss(reduction='none')(pred, target)
print("Mean:", loss_mean.item())
print("Sum:", loss_sum.item())
print("None:", 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: durchschnittlicher Verlust
loss_mean = nn.MSELoss(reduction='mean')(pred, target)
# sum: Gesamtverlust
loss_sum = nn.MSELoss(reduction='sum')(pred, target)
# none: keine Aggregation
loss_none = nn.MSELoss(reduction='none')(pred, target)
print("Mean:", loss_mean.item())
print("Sum:", loss_sum.item())
print("None:", loss_none.tolist())
Beispiel 4: Umgang mit mehrdimensionaler Ausgabe
Mehrdimensionale Regression:
Beispiel
import torch
import torch.nn as nn
# Mehrdimensionale Ausgabe
pred = torch.randn(4, 3) # batch=4, 3 Ausgaben
target = torch.randn(4, 3)
criterion = nn.MSELoss()
loss = criterion(pred, target)
print("Vorhergesagte Form:", pred.shape)
print("Zielform:", target.shape)
print("MSE-Verlust:", loss.item())
import torch.nn as nn
# Mehrdimensionale Ausgabe
pred = torch.randn(4, 3) # batch=4, 3 Ausgaben
target = torch.randn(4, 3)
criterion = nn.MSELoss()
loss = criterion(pred, target)
print("Vorhergesagte Form:", pred.shape)
print("Zielform:", target.shape)
print("MSE-Verlust:", loss.item())
FAQ
F1: Was ist besser, MSE oder MAE?
- MSE: Empfindlich gegenüber Ausreißern, stabile Gradienten
- MAE (L1): Robust gegenüber Ausreißern, instabile Gradienten
F2: Kann MSE verwendet werden, wenn Ausgaben negative Werte haben?
Ja, MSE schränkt den Ausgabebereich nicht ein.
F3: Welche Verlustfunktion wird für Klassifikationsaufgaben verwendet?
Verwenden Sie CrossEntropyLoss für Klassifikationsaufgaben.
Anwendungsfälle
nn.MSELossZu den wichtigsten Anwendungsszenarien gehören:
- Regressionsaufgaben: Vorhersage von Hauspreisen, numerische Schätzung
- Vorhersage kontinuierlicher Werte: Zielverfolgung
- Generative Modelle: Bestimmte Verluste für VAE, GAN
Andere Erweiterungen