Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Lineare Regression | Fortgeschrittenere Konzepte
PyTorch-Grundlagen

bookLineare Regression

Wir verwenden einen realen Datensatz, um lineare Regression in PyTorch zu implementieren. Der Datensatz enthält zwei Spalten:

  • 'Number of Appliances': die Anzahl der Geräte in einem Haushalt (Eingabemerkmal, X);
  • 'Electricity Bill': der entsprechende Betrag der Stromrechnung (Zielausgabe, Y).

1. Laden und Überprüfen des Datensatzes

Der Datensatz ist in einer CSV-Datei gespeichert. Wir laden ihn mit pandas und überprüfen die ersten Zeilen:

12345
import pandas as pd # Load the dataset bills_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/electricity_bills.csv') # Display the first five rows print(bills_df.head())
copy

2. Vorbereitung der Daten für PyTorch

Als Nächstes sollten die Eingabe- (X) und Zielspalten (Y) extrahiert, in PyTorch-Tensoren umgewandelt und in 2D-Tensoren umgeformt werden, um die Kompatibilität mit den Operationen von PyTorch sicherzustellen:

12345678910
import torch import pandas as pd # Load the dataset bills_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/electricity_bills.csv') # Extract input (Number of Appliances) and target (Electricity Bill) X = torch.tensor(bills_df['Number of Appliances'].values).float().reshape(-1, 1) Y = torch.tensor(bills_df['Electricity Bill'].values).float().reshape(-1, 1) # Print the shapes of X and Y print(f"Shape of X: {X.shape}") print(f"Shape of Y: {Y.shape}")
copy

3. Definition des linearen Modells

Das nn.Linear-Modul in PyTorch definiert eine vollständig verbundene Schicht, die y = xWT + b ausführt. Es ist ein grundlegender Baustein in neuronalen Netzen und kann mit anderen Schichten für komplexere Architekturen kombiniert werden.

Die wichtigsten Parameter sind:

  • in_features: Anzahl der Eingabemerkmale (unabhängige Variablen);
  • out_features: Anzahl der Ausgabemerkmale (vorhergesagte Werte).

Für eine einfache lineare Regression, wie in unserem Fall, wird ein einzelner Output auf Basis einer Eingabe vorhergesagt. Daher gilt:

  • in_features=1: eine Eingabevariable;
  • out_features=1: ein vorhergesagter Wert.
import torch.nn as nn
# Define the linear regression model
model = nn.Linear(in_features=1, out_features=1)

4. Definition der Verlustfunktion und des Optimierers

Wir verwenden den mittleren quadratischen Fehler (MSE) als Verlustfunktion und stochastischen Gradientenabstieg (SGD) als Optimierer mit einer Lernrate von 0.005.

Die MSE-Verlustfunktion kann mit der Klasse nn.MSELoss definiert werden und SGD mit der entsprechenden Klasse aus dem Modul torch.optim.

import torch.optim as optim
# Define the loss function (MSE)
loss_fn = nn.MSELoss()
# Define the optimizer (SGD)
optimizer = optim.SGD(model.parameters(), lr=0.005)

5. Training des Modells

Das Training umfasst das Durchführen eines Forward Pass und eines Backward Pass für eine festgelegte Anzahl von Epochen.

  • Forward Pass: In diesem Schritt berechnet das Modell Vorhersagen basierend auf den Eingabedaten und ermittelt den Verlust, indem die Vorhersagen mit den tatsächlichen Zielwerten verglichen werden;
  • Backward Pass: In diesem Schritt werden die Gradienten mittels Backpropagation (basierend auf dem Verlust) berechnet und die Gewichte und Biases des Modells mit einem Optimierungsalgorithmus, in unserem Fall SGD, aktualisiert.

Dieser Prozess wird für die festgelegte Anzahl an Epochen wiederholt, um den Verlust zu minimieren und die Leistung des Modells zu verbessern.

1234567891011121314151617181920212223242526272829303132333435
import torch import torch.nn as nn import torch.optim as optim import pandas as pd # Load the dataset bills_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/electricity_bills.csv') # Extract input (Number of Appliances) and target (Electricity Bill) X = torch.tensor(bills_df['Number of Appliances'].values).float().reshape(-1, 1) Y = torch.tensor(bills_df['Electricity Bill'].values).float().reshape(-1, 1) # Define the linear regression model model = nn.Linear(in_features=1, out_features=1) # Define the loss function (MSE) loss_fn = nn.MSELoss() # Define the optimizer (SGD) optimizer = optim.SGD(model.parameters(), lr=0.005) # Training loop epochs = 100 for epoch in range(epochs): # Forward pass Y_pred = model(X) loss = loss_fn(Y_pred, Y) # Backward pass optimizer.zero_grad() # Reset gradients loss.backward() # Compute gradients # Update parameters optimizer.step() if (epoch + 1) % 10 == 0: print(f"Epoch [{epoch+1}/{epochs}], Loss: {loss.item():.4f}") # Final parameters print(f"Trained weight: {model.weight.item()}") print(f"Trained bias: {model.bias.item()}")
copy

Die Parameter des Modells, nämlich seine Gewichte und Biases, können über die Attribute .weight und .bias abgerufen werden:

weights = model.weight.item()
biases = model.bias.item()
War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 3

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Suggested prompts:

Can you explain how to interpret the trained weight and bias values?

How can I use the trained model to make predictions on new data?

What does the loss value tell us about the model's performance?

Awesome!

Completion rate improved to 5

bookLineare Regression

Swipe um das Menü anzuzeigen

Wir verwenden einen realen Datensatz, um lineare Regression in PyTorch zu implementieren. Der Datensatz enthält zwei Spalten:

  • 'Number of Appliances': die Anzahl der Geräte in einem Haushalt (Eingabemerkmal, X);
  • 'Electricity Bill': der entsprechende Betrag der Stromrechnung (Zielausgabe, Y).

1. Laden und Überprüfen des Datensatzes

Der Datensatz ist in einer CSV-Datei gespeichert. Wir laden ihn mit pandas und überprüfen die ersten Zeilen:

12345
import pandas as pd # Load the dataset bills_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/electricity_bills.csv') # Display the first five rows print(bills_df.head())
copy

2. Vorbereitung der Daten für PyTorch

Als Nächstes sollten die Eingabe- (X) und Zielspalten (Y) extrahiert, in PyTorch-Tensoren umgewandelt und in 2D-Tensoren umgeformt werden, um die Kompatibilität mit den Operationen von PyTorch sicherzustellen:

12345678910
import torch import pandas as pd # Load the dataset bills_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/electricity_bills.csv') # Extract input (Number of Appliances) and target (Electricity Bill) X = torch.tensor(bills_df['Number of Appliances'].values).float().reshape(-1, 1) Y = torch.tensor(bills_df['Electricity Bill'].values).float().reshape(-1, 1) # Print the shapes of X and Y print(f"Shape of X: {X.shape}") print(f"Shape of Y: {Y.shape}")
copy

3. Definition des linearen Modells

Das nn.Linear-Modul in PyTorch definiert eine vollständig verbundene Schicht, die y = xWT + b ausführt. Es ist ein grundlegender Baustein in neuronalen Netzen und kann mit anderen Schichten für komplexere Architekturen kombiniert werden.

Die wichtigsten Parameter sind:

  • in_features: Anzahl der Eingabemerkmale (unabhängige Variablen);
  • out_features: Anzahl der Ausgabemerkmale (vorhergesagte Werte).

Für eine einfache lineare Regression, wie in unserem Fall, wird ein einzelner Output auf Basis einer Eingabe vorhergesagt. Daher gilt:

  • in_features=1: eine Eingabevariable;
  • out_features=1: ein vorhergesagter Wert.
import torch.nn as nn
# Define the linear regression model
model = nn.Linear(in_features=1, out_features=1)

4. Definition der Verlustfunktion und des Optimierers

Wir verwenden den mittleren quadratischen Fehler (MSE) als Verlustfunktion und stochastischen Gradientenabstieg (SGD) als Optimierer mit einer Lernrate von 0.005.

Die MSE-Verlustfunktion kann mit der Klasse nn.MSELoss definiert werden und SGD mit der entsprechenden Klasse aus dem Modul torch.optim.

import torch.optim as optim
# Define the loss function (MSE)
loss_fn = nn.MSELoss()
# Define the optimizer (SGD)
optimizer = optim.SGD(model.parameters(), lr=0.005)

5. Training des Modells

Das Training umfasst das Durchführen eines Forward Pass und eines Backward Pass für eine festgelegte Anzahl von Epochen.

  • Forward Pass: In diesem Schritt berechnet das Modell Vorhersagen basierend auf den Eingabedaten und ermittelt den Verlust, indem die Vorhersagen mit den tatsächlichen Zielwerten verglichen werden;
  • Backward Pass: In diesem Schritt werden die Gradienten mittels Backpropagation (basierend auf dem Verlust) berechnet und die Gewichte und Biases des Modells mit einem Optimierungsalgorithmus, in unserem Fall SGD, aktualisiert.

Dieser Prozess wird für die festgelegte Anzahl an Epochen wiederholt, um den Verlust zu minimieren und die Leistung des Modells zu verbessern.

1234567891011121314151617181920212223242526272829303132333435
import torch import torch.nn as nn import torch.optim as optim import pandas as pd # Load the dataset bills_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/electricity_bills.csv') # Extract input (Number of Appliances) and target (Electricity Bill) X = torch.tensor(bills_df['Number of Appliances'].values).float().reshape(-1, 1) Y = torch.tensor(bills_df['Electricity Bill'].values).float().reshape(-1, 1) # Define the linear regression model model = nn.Linear(in_features=1, out_features=1) # Define the loss function (MSE) loss_fn = nn.MSELoss() # Define the optimizer (SGD) optimizer = optim.SGD(model.parameters(), lr=0.005) # Training loop epochs = 100 for epoch in range(epochs): # Forward pass Y_pred = model(X) loss = loss_fn(Y_pred, Y) # Backward pass optimizer.zero_grad() # Reset gradients loss.backward() # Compute gradients # Update parameters optimizer.step() if (epoch + 1) % 10 == 0: print(f"Epoch [{epoch+1}/{epochs}], Loss: {loss.item():.4f}") # Final parameters print(f"Trained weight: {model.weight.item()}") print(f"Trained bias: {model.bias.item()}")
copy

Die Parameter des Modells, nämlich seine Gewichte und Biases, können über die Attribute .weight und .bias abgerufen werden:

weights = model.weight.item()
biases = model.bias.item()
War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 3
some-alt