Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Opprettelse av et Enkelt Nevralt Nettverk | Nevrale Nettverk i PyTorch
PyTorch-essensielt

bookOpprettelse av et Enkelt Nevralt Nettverk

Målet vårt er å bygge et grunnleggende PyTorch-nevralt nettverk ved å bruke digits-datasettet, et klassisk datasett innen maskinlæring. Oppgaven er å forutsi sifferet (målvariabel) basert på bildet av håndskriften, representert som et sett med pikselverdier (egenskaper).

Oversikt over datasettet

Digits-datasettet inneholder bilder av håndskrevne sifre representert som numeriske pikselverdier. Hver prøve består av 64 egenskaper, som tilsvarer pikselintensiteter fra et 8×8 gråtonebilde. Målvariabelen ('target'-kolonnen) representerer sifferklassen (0-9), som angir hvilket tall bildet tilsvarer.

Første steg er å lese CSV-filen og hente ut egenskapene (X) og målvariabelen (y), som representerer utdataen vi ønsker å forutsi:

import pandas as pd

digits_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_3/digits.csv')
# Extract features and target
X = digits_df.drop(columns=["target"]).values
y = digits_df["target"].values

Definere modellklassen

Først må alle nødvendige PyTorch-moduler (nn, F) importeres. nn-modulen brukes til å definere modellag og arkitekturer, mens F-modulen inneholder aktiveringsfunksjoner, tapsfunksjoner og andre verktøy som ofte brukes i en funksjonell stil.

import torch.nn as nn
import torch.nn.functional as F

Vi kan nå fortsette med å definere modellklassen:

class DigitsClassifier(nn.Module):
    ...

Modellarkitektur

Siden oppgaven er en enkel multiklasseklassifisering, er et multilags perseptron (MLP) med 2 skjulte lag tilstrekkelig.

class DigitsClassifier(nn.Module):
    def __init__(self, input_features, hidden1, hidden2, output_classes):
        super().__init__()
        # Define the layers
        self.fc1 = nn.Linear(input_features, hidden1)  # Input to first hidden layer
        self.fc2 = nn.Linear(hidden1, hidden2)  # First hidden to second hidden layer
        self.out = nn.Linear(hidden2, output_classes)  # Second hidden to output layer

Som du allerede vet, består et MLP av fullt tilkoblede lag (også kalt tette lag), der skjulte lag prosesserer inndatafunksjonene, og utgangslaget gir de endelige klasseprediksjonene. Disse fullt tilkoblede lagene er representert som nn.Linear-lag i PyTorch.

Fremoverpropagering

Denne .forward()-metoden definerer fremoverpropageringen av data gjennom modellen.

def forward(self, x):
    # Pass data through layers with activation functions
    a1 = F.relu(self.fc1(x))  # First hidden layer with ReLU
    a2 = F.relu(self.fc2(a1))  # Second hidden layer with ReLU
    output = self.out(a2)          # Output layer (no activation for raw scores)
    return output

Inndatatensoren x sendes først gjennom det første fullt tilkoblede laget (fc1), etterfulgt av ReLU-aktiveringsfunksjonen for å introdusere ikke-linearitet. Deretter går den gjennom det andre fullt tilkoblede laget (fc2), igjen etterfulgt av ReLU.

Til slutt passerer de transformerede dataene gjennom utgangslaget (out), som produserer rå score (logitter) for utgangsklassene.

Opprettelse av modellen

Siden modellklassen nå er definert, kan vi nå definere modellparametere og instansiere modellen.

På samme måte som antall skjulte lag, velges antall nevroner i hvert skjult lag noe vilkårlig i vårt eksempel: 32 og 16 for henholdsvis første og andre skjulte lag.

Følgelig er den resulterende modellen strukturert som følger:

  • Inndatalag: tilsvarer antall funksjoner i datasettet (64 for dette datasettet);
  • Skjulte lag: vilkårlig antall nevroner (32 og 16);
  • Utgangslag: tilsvarer antall klasser (10 sifre).

Fullstendig implementering

12345678910111213141516171819202122232425262728293031323334
import torch.nn as nn import torch.nn.functional as F import pandas as pd digits_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_3/digits.csv') # Extract features and target X = digits_df.drop(columns=["target"]).values y = digits_df["target"].values # Define the model class class DigitsClassifier(nn.Module): def __init__(self, input_features, hidden1, hidden2, output_classes): super().__init__() # Define the layers self.fc1 = nn.Linear(input_features, hidden1) # Input to first hidden layer self.fc2 = nn.Linear(hidden1, hidden2) # First hidden to second hidden layer self.out = nn.Linear(hidden2, output_classes) # Second hidden to output layer def forward(self, x): # Pass data through layers with activation functions a1 = F.relu(self.fc1(x)) # First hidden layer with ReLU a2 = F.relu(self.fc2(a1)) # Second hidden layer with ReLU output = self.out(a2) # Output layer (no activation for raw scores) return output # Define model parameters input_features = X.shape[1] # Number of features (pixels) hidden1 = 32 # Number of neurons in first hidden layer hidden2 = 16 # Number of neurons in second hidden layer output_classes = len(digits_df["target"].unique()) # Number of unique digits (0-9) # Create an instance of the model model = DigitsClassifier(input_features, hidden1, hidden2, output_classes) # Display the model structure print(model)
copy
question mark

Hvilket av følgende utsagn om implementering av et nevralt nettverk i PyTorch er korrekt?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 1

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Awesome!

Completion rate improved to 5

bookOpprettelse av et Enkelt Nevralt Nettverk

Sveip for å vise menyen

Målet vårt er å bygge et grunnleggende PyTorch-nevralt nettverk ved å bruke digits-datasettet, et klassisk datasett innen maskinlæring. Oppgaven er å forutsi sifferet (målvariabel) basert på bildet av håndskriften, representert som et sett med pikselverdier (egenskaper).

Oversikt over datasettet

Digits-datasettet inneholder bilder av håndskrevne sifre representert som numeriske pikselverdier. Hver prøve består av 64 egenskaper, som tilsvarer pikselintensiteter fra et 8×8 gråtonebilde. Målvariabelen ('target'-kolonnen) representerer sifferklassen (0-9), som angir hvilket tall bildet tilsvarer.

Første steg er å lese CSV-filen og hente ut egenskapene (X) og målvariabelen (y), som representerer utdataen vi ønsker å forutsi:

import pandas as pd

digits_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_3/digits.csv')
# Extract features and target
X = digits_df.drop(columns=["target"]).values
y = digits_df["target"].values

Definere modellklassen

Først må alle nødvendige PyTorch-moduler (nn, F) importeres. nn-modulen brukes til å definere modellag og arkitekturer, mens F-modulen inneholder aktiveringsfunksjoner, tapsfunksjoner og andre verktøy som ofte brukes i en funksjonell stil.

import torch.nn as nn
import torch.nn.functional as F

Vi kan nå fortsette med å definere modellklassen:

class DigitsClassifier(nn.Module):
    ...

Modellarkitektur

Siden oppgaven er en enkel multiklasseklassifisering, er et multilags perseptron (MLP) med 2 skjulte lag tilstrekkelig.

class DigitsClassifier(nn.Module):
    def __init__(self, input_features, hidden1, hidden2, output_classes):
        super().__init__()
        # Define the layers
        self.fc1 = nn.Linear(input_features, hidden1)  # Input to first hidden layer
        self.fc2 = nn.Linear(hidden1, hidden2)  # First hidden to second hidden layer
        self.out = nn.Linear(hidden2, output_classes)  # Second hidden to output layer

Som du allerede vet, består et MLP av fullt tilkoblede lag (også kalt tette lag), der skjulte lag prosesserer inndatafunksjonene, og utgangslaget gir de endelige klasseprediksjonene. Disse fullt tilkoblede lagene er representert som nn.Linear-lag i PyTorch.

Fremoverpropagering

Denne .forward()-metoden definerer fremoverpropageringen av data gjennom modellen.

def forward(self, x):
    # Pass data through layers with activation functions
    a1 = F.relu(self.fc1(x))  # First hidden layer with ReLU
    a2 = F.relu(self.fc2(a1))  # Second hidden layer with ReLU
    output = self.out(a2)          # Output layer (no activation for raw scores)
    return output

Inndatatensoren x sendes først gjennom det første fullt tilkoblede laget (fc1), etterfulgt av ReLU-aktiveringsfunksjonen for å introdusere ikke-linearitet. Deretter går den gjennom det andre fullt tilkoblede laget (fc2), igjen etterfulgt av ReLU.

Til slutt passerer de transformerede dataene gjennom utgangslaget (out), som produserer rå score (logitter) for utgangsklassene.

Opprettelse av modellen

Siden modellklassen nå er definert, kan vi nå definere modellparametere og instansiere modellen.

På samme måte som antall skjulte lag, velges antall nevroner i hvert skjult lag noe vilkårlig i vårt eksempel: 32 og 16 for henholdsvis første og andre skjulte lag.

Følgelig er den resulterende modellen strukturert som følger:

  • Inndatalag: tilsvarer antall funksjoner i datasettet (64 for dette datasettet);
  • Skjulte lag: vilkårlig antall nevroner (32 og 16);
  • Utgangslag: tilsvarer antall klasser (10 sifre).

Fullstendig implementering

12345678910111213141516171819202122232425262728293031323334
import torch.nn as nn import torch.nn.functional as F import pandas as pd digits_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_3/digits.csv') # Extract features and target X = digits_df.drop(columns=["target"]).values y = digits_df["target"].values # Define the model class class DigitsClassifier(nn.Module): def __init__(self, input_features, hidden1, hidden2, output_classes): super().__init__() # Define the layers self.fc1 = nn.Linear(input_features, hidden1) # Input to first hidden layer self.fc2 = nn.Linear(hidden1, hidden2) # First hidden to second hidden layer self.out = nn.Linear(hidden2, output_classes) # Second hidden to output layer def forward(self, x): # Pass data through layers with activation functions a1 = F.relu(self.fc1(x)) # First hidden layer with ReLU a2 = F.relu(self.fc2(a1)) # Second hidden layer with ReLU output = self.out(a2) # Output layer (no activation for raw scores) return output # Define model parameters input_features = X.shape[1] # Number of features (pixels) hidden1 = 32 # Number of neurons in first hidden layer hidden2 = 16 # Number of neurons in second hidden layer output_classes = len(digits_df["target"].unique()) # Number of unique digits (0-9) # Create an instance of the model model = DigitsClassifier(input_features, hidden1, hidden2, output_classes) # Display the model structure print(model)
copy
question mark

Hvilket av følgende utsagn om implementering av et nevralt nettverk i PyTorch er korrekt?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 1
some-alt