Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Gradientbånd | Grunnleggende om TensorFlow
Introduksjon til TensorFlow

Gradientbånd

Gradient Tape

Forståelse av grunnleggende tensoroperasjoner gir mulighet til å effektivisere og akselerere disse prosessene ved hjelp av innebygde TensorFlow-funksjoner. Det første av disse avanserte verktøyene som utforskes er Gradient Tape.

Hva er Gradient Tape?

Dette kapittelet tar for seg et av de grunnleggende konseptene i TensorFlow, nemlig Gradient Tape. Denne funksjonen er avgjørende for å forstå og implementere gradientbaserte optimaliseringsteknikker, spesielt innen dyp læring.

Gradient Tape i TensorFlow er et verktøy som registrerer operasjoner for automatisk differensiering. Når operasjoner utføres innenfor en Gradient Tape-blokk, holder TensorFlow oversikt over alle beregningene som skjer. Dette er spesielt nyttig ved trening av maskinlæringsmodeller, der gradienter er nødvendige for å optimalisere modellparametere.

Note
Merk

I hovedsak er en gradient et sett av partiellderivert.

Bruk av Gradient Tape

For å bruke Gradient Tape, følg disse trinnene:

  • Opprett en Gradient Tape-blokk: bruk with tf.GradientTape() as tape:. Alle beregninger spores innenfor denne blokken;
  • Definer beregningene: utfør operasjoner med tensorer innenfor blokken (for eksempel definere et fremoverpass i et nevralt nettverk);
  • Beregn gradienter: bruk tape.gradient(target, sources) for å kalkulere gradientene til målet med hensyn til kildene.

Enkel gradientberegning

Et enkelt eksempel for å forstå dette bedre.

123456789101112131415
import tensorflow as tf # Define input variables x = tf.Variable(3.0) # Start recording the operations with tf.GradientTape() as tape: # Define the calculations y = x * x # Extract the gradient for the specific input (`x`) grad = tape.gradient(y, x) print(f'Result of y: {y}') print(f'The gradient of y with respect to x is: {grad.numpy()}')

Denne koden beregner gradienten til y = x^2 ved x = 3. Dette tilsvarer den partielle deriverte av y med hensyn på x.

enkel_derivert

Flere partielle deriverte

Når utdata påvirkes av flere innganger, kan en partiell derivasjon beregnes med hensyn på hver av disse inngangene (eller bare et utvalg av dem). Dette oppnås ved å oppgi en liste med variabler som parameteren sources.

Resultatet fra denne operasjonen vil være en tilsvarende liste med tensorer, der hver tensor representerer den partielle deriverte med hensyn på hver av variablene spesifisert i sources.

1234567891011121314151617
import tensorflow as tf # Define input variables x = tf.Variable(tf.fill((2, 3), 3.0)) z = tf.Variable(5.0) # Start recording the operations with tf.GradientTape() as tape: # Define the calculations y = tf.reduce_sum(x * x + 2 * z) # Extract the gradient for the specific inputs (`x` and `z`) grad = tape.gradient(y, [x, z]) print(f'Result of y: {y}') print(f"The gradient of y with respect to x is:\n{grad[0].numpy()}") print(f"The gradient of y with respect to z is: {grad[1].numpy()}")

Denne koden beregner gradienten til funksjonen y = sum(x^2 + 2*z) for gitte verdier av x og z. I dette eksemplet vises gradienten til x som en 2D tensor, der hvert element tilsvarer den partielle deriverte av den respektive verdien i den opprinnelige x-matrisen.

partielle_derivater
Eksempelbeskrivelse
expand arrow

Beregning av gradienten med hensyn på x

Når vi beregner den deriverte av y med hensyn på x, spør vi i bunn og grunn: «Hvis vi endrer verdien til x litt, hvor mye endres y?» Operasjonen på x er opphøying i andre (x^2), så den deriverte forteller oss at for hver enhets økning i x, vil y øke med 2*x.

Siden alle elementene i x er 3.0:

  • Gradient for hvert element er 2*3.0 = 6.0;
  • Gradientmatrisen med hensyn på x har samme form som x (2x3), der hvert element er 6.0. Dette indikerer at en økning av et enkelt element i x med 1 vil øke y med 6 enheter.

Beregning av gradienten med hensyn på z

For z vurderer vi hvordan endringer i z påvirker y. Siden z legges til hvert kvadrert element av x (etter dobling), spør vi i praksis: «Hvis z øker med 1, hvor mye øker y?» Etter reglene for broadcasting legges 2*z til hvert element av x^2, som om vi hadde en matrise på samme størrelse som x, fylt med 2*z.

  • Operasjonen 2*z med hensyn på z er enkel: den deriverte er 2 fordi 2*z endres med 2 enheter for hver enhets endring i z;
  • Siden denne operasjonen påvirker hvert element i matrisen x, er den totale endringen i y for en enhets endring i z lik 2 ganger antall elementer i x (som er 6, fra 2x3-matrisen). Dermed er totalgradienten med hensyn på z 2*6 = 12. Dette betyr at en økning av z med 1 enhet øker y med 12 enheter, som reflekterer den samlede effekten av endringen på tvers av alle elementene i x.

Oppsummert

  • Gradienten med hensyn på x er en matrise som viser hvordan en enhets økning i et hvilket som helst element i x fører til en 6-enhets økning i y, og reflekterer det direkte forholdet mellom endringer i x og endringer i y;
  • Gradienten med hensyn på z er en skalar (12), som viser den totale effekten av en enhets økning i zy, og tar hensyn til virkningen over hele matrisen x.
Note
Merknad

For ytterligere innsikt i Gradient Tape-funksjonalitet, inkludert høyere ordens deriverte og uthenting av Jacobian-matrisen, se den offisielle TensorFlow documentation.

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 2
single

single

Gradientbånd

Sveip for å vise menyen

Gradient Tape

Forståelse av grunnleggende tensoroperasjoner gir mulighet til å effektivisere og akselerere disse prosessene ved hjelp av innebygde TensorFlow-funksjoner. Det første av disse avanserte verktøyene som utforskes er Gradient Tape.

Hva er Gradient Tape?

Dette kapittelet tar for seg et av de grunnleggende konseptene i TensorFlow, nemlig Gradient Tape. Denne funksjonen er avgjørende for å forstå og implementere gradientbaserte optimaliseringsteknikker, spesielt innen dyp læring.

Gradient Tape i TensorFlow er et verktøy som registrerer operasjoner for automatisk differensiering. Når operasjoner utføres innenfor en Gradient Tape-blokk, holder TensorFlow oversikt over alle beregningene som skjer. Dette er spesielt nyttig ved trening av maskinlæringsmodeller, der gradienter er nødvendige for å optimalisere modellparametere.

Note
Merk

I hovedsak er en gradient et sett av partiellderivert.

Bruk av Gradient Tape

For å bruke Gradient Tape, følg disse trinnene:

  • Opprett en Gradient Tape-blokk: bruk with tf.GradientTape() as tape:. Alle beregninger spores innenfor denne blokken;
  • Definer beregningene: utfør operasjoner med tensorer innenfor blokken (for eksempel definere et fremoverpass i et nevralt nettverk);
  • Beregn gradienter: bruk tape.gradient(target, sources) for å kalkulere gradientene til målet med hensyn til kildene.

Enkel gradientberegning

Et enkelt eksempel for å forstå dette bedre.

123456789101112131415
import tensorflow as tf # Define input variables x = tf.Variable(3.0) # Start recording the operations with tf.GradientTape() as tape: # Define the calculations y = x * x # Extract the gradient for the specific input (`x`) grad = tape.gradient(y, x) print(f'Result of y: {y}') print(f'The gradient of y with respect to x is: {grad.numpy()}')

Denne koden beregner gradienten til y = x^2 ved x = 3. Dette tilsvarer den partielle deriverte av y med hensyn på x.

enkel_derivert

Flere partielle deriverte

Når utdata påvirkes av flere innganger, kan en partiell derivasjon beregnes med hensyn på hver av disse inngangene (eller bare et utvalg av dem). Dette oppnås ved å oppgi en liste med variabler som parameteren sources.

Resultatet fra denne operasjonen vil være en tilsvarende liste med tensorer, der hver tensor representerer den partielle deriverte med hensyn på hver av variablene spesifisert i sources.

1234567891011121314151617
import tensorflow as tf # Define input variables x = tf.Variable(tf.fill((2, 3), 3.0)) z = tf.Variable(5.0) # Start recording the operations with tf.GradientTape() as tape: # Define the calculations y = tf.reduce_sum(x * x + 2 * z) # Extract the gradient for the specific inputs (`x` and `z`) grad = tape.gradient(y, [x, z]) print(f'Result of y: {y}') print(f"The gradient of y with respect to x is:\n{grad[0].numpy()}") print(f"The gradient of y with respect to z is: {grad[1].numpy()}")

Denne koden beregner gradienten til funksjonen y = sum(x^2 + 2*z) for gitte verdier av x og z. I dette eksemplet vises gradienten til x som en 2D tensor, der hvert element tilsvarer den partielle deriverte av den respektive verdien i den opprinnelige x-matrisen.

partielle_derivater
Eksempelbeskrivelse
expand arrow

Beregning av gradienten med hensyn på x

Når vi beregner den deriverte av y med hensyn på x, spør vi i bunn og grunn: «Hvis vi endrer verdien til x litt, hvor mye endres y?» Operasjonen på x er opphøying i andre (x^2), så den deriverte forteller oss at for hver enhets økning i x, vil y øke med 2*x.

Siden alle elementene i x er 3.0:

  • Gradient for hvert element er 2*3.0 = 6.0;
  • Gradientmatrisen med hensyn på x har samme form som x (2x3), der hvert element er 6.0. Dette indikerer at en økning av et enkelt element i x med 1 vil øke y med 6 enheter.

Beregning av gradienten med hensyn på z

For z vurderer vi hvordan endringer i z påvirker y. Siden z legges til hvert kvadrert element av x (etter dobling), spør vi i praksis: «Hvis z øker med 1, hvor mye øker y?» Etter reglene for broadcasting legges 2*z til hvert element av x^2, som om vi hadde en matrise på samme størrelse som x, fylt med 2*z.

  • Operasjonen 2*z med hensyn på z er enkel: den deriverte er 2 fordi 2*z endres med 2 enheter for hver enhets endring i z;
  • Siden denne operasjonen påvirker hvert element i matrisen x, er den totale endringen i y for en enhets endring i z lik 2 ganger antall elementer i x (som er 6, fra 2x3-matrisen). Dermed er totalgradienten med hensyn på z 2*6 = 12. Dette betyr at en økning av z med 1 enhet øker y med 12 enheter, som reflekterer den samlede effekten av endringen på tvers av alle elementene i x.

Oppsummert

  • Gradienten med hensyn på x er en matrise som viser hvordan en enhets økning i et hvilket som helst element i x fører til en 6-enhets økning i y, og reflekterer det direkte forholdet mellom endringer i x og endringer i y;
  • Gradienten med hensyn på z er en skalar (12), som viser den totale effekten av en enhets økning i zy, og tar hensyn til virkningen over hele matrisen x.
Note
Merknad

For ytterligere innsikt i Gradient Tape-funksjonalitet, inkludert høyere ordens deriverte og uthenting av Jacobian-matrisen, se den offisielle TensorFlow documentation.

Oppgave

Sveip for å begynne å kode

Målet ditt er å beregne gradienten (derivert) av en gitt matematisk funksjon i et spesifikt punkt ved hjelp av TensorFlows Gradient Tape. Funksjonen og punktet vil bli oppgitt, og du vil se hvordan du bruker TensorFlow for å finne gradienten i dette punktet.

Vurder en kvadratisk funksjon av én variabel x, definert som:

f(x) = x^2 + 2x - 1

Din oppgave er å beregne den deriverte av denne funksjonen ved x = 2.

Steg

  1. Definer variabelen x i punktet der du ønsker å beregne den deriverte.
  2. Bruk Gradient Tape for å registrere utregningen av funksjonen f(x).
  3. Beregn gradienten til f(x) i det spesifiserte punktet.

Merk

Gradient kan kun beregnes for verdier av flyttallstype.

Derivative of a Function at a Point

Løsning

Switch to desktopBytt til skrivebordet for virkelighetspraksisFortsett der du er med et av alternativene nedenfor
Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 2
single

single

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

some-alt