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

bookGrafutførelse

Funksjonsdekoratør

En funksjonsdekoratør er et verktøy som "omslutter" en funksjon for å endre dens oppførsel. I TensorFlow er den mest brukte dekoratøren @tf.function, som konverterer en Python-funksjon til en TensorFlow-graf.

Formål med @tf.function

Hovedformålet med å bruke dekoratører som @tf.function er å optimalisere beregninger. Når en funksjon dekoreres med @tf.function, konverterer TensorFlow funksjonen til en svært effektiv graf som kan kjøres mye raskere, spesielt for komplekse operasjoner. Denne konverteringen gjør det mulig for TensorFlow å utføre optimaliseringer og utnytte parallellisering, noe som er avgjørende for ytelse i maskinlæringsoppgaver.

Eksempel

Et eksempel er gitt for bedre forståelse.

1234567891011
import tensorflow as tf # Define a simple function and decorate it with `@tf.function` @tf.function def compute_area(radius): return 3.1415 * radius ** 2 # Call the function area = compute_area(tf.constant(3.0)) print(f"The area is: {area.numpy()}")
copy

I denne koden blir compute_area() konvertert til en TensorFlow-graf, noe som gjør at den kjører raskere og mer effektivt.

Hvordan fungerer grafutførelse?

TensorFlow opererer i to moduser: Eager Execution og Graph Execution. Som standard kjører TensorFlow i Eager Execution-modus, noe som betyr at operasjoner utføres etter hvert som de defineres, og gir et fleksibelt og intuitivt grensesnitt. Imidlertid kan Eager Execution være mindre effektivt for komplekse beregninger og store modeller.

Dette er hvor @tf.function og grafutførelse kommer inn. Når du bruker @tf.function-dekoren på en funksjon, konverterer TensorFlow funksjonen til en statisk beregningsgraf av operasjoner.

Optimaliseringsteknikker

  1. Grafoptimalisering: TensorFlow optimaliserer grafen ved å fjerne ubrukte noder, slå sammen dupliserte delgrafer og utføre andre optimaliseringer på grafnivå. Dette gir raskere kjøring og redusert minnebruk.
  2. Raskere kjøring: Grafer kjøres raskere enn umiddelbare operasjoner fordi de reduserer Python-overhead. Python er ikke involvert i utførelsen av grafen, noe som eliminerer overhead fra Python-tolkens kall.
  3. Parallellisering og distribusjon: Grafer gjør det enkelt for TensorFlow å identifisere muligheter for parallellisering og fordele beregninger på flere enheter, som CPU-er og GPU-er.
  4. Mellomlagring og gjenbruk: Når en funksjon dekorert med @tf.function kalles med samme input-signatur, gjenbruker TensorFlow den tidligere opprettede grafen, noe som sparer tid ved å unngå å lage grafen på nytt.

Eksempel med Gradient Tape

1234567891011
import tensorflow as tf @tf.function def compute_gradient(x): with tf.GradientTape() as tape: y = x * x * x return tape.gradient(y, x) x = tf.Variable(3.0) grad = compute_gradient(x) print(f"The gradient at x = {x.numpy()} is {grad.numpy()}")
copy

I dette eksemplet er compute_gradient en funksjon som beregner gradienten til y = x^3 ved et gitt punkt x. Dekoratoren @tf.function sikrer at funksjonen kjøres som en TensorFlow-graf.

Eksempel med betinget logikk

1234567891011121314
import tensorflow as tf @tf.function def compute_gradient_conditional(x): with tf.GradientTape() as tape: if tf.reduce_sum(x) > 0: y = x * x else: y = x * x * x return tape.gradient(y, x) x = tf.Variable([-2.0, 2.0]) grad = compute_gradient_conditional(x) print(f"The gradient at x = {x.numpy()} is {grad.numpy()}")
copy

I dette eksemplet beregner funksjonen ulike gradienter basert på en betingelse. TensorFlows @tf.function konverterer ikke bare det statiske beregningsdiagrammet, men håndterer også dynamiske elementer som betingelser og løkker effektivt.

Oppgave

Swipe to start coding

I denne oppgaven skal du sammenligne kjøretidene til to TensorFlow-funksjoner som utfører matrise-multiplikasjon: én med @tf.function-dekoratøren og én uten.

Steg

  1. Definer funksjonen matrix_multiply_optimized og sørg for at den inkluderer @tf.function-dekoratøren.
  2. Fullfør begge funksjonene ved å beregne gjennomsnittet av de resulterende matrisene.
  3. Generer to uniformt fordelte tilfeldige matriser ved å bruke TensorFlows funksjoner for generering av tilfeldige matriser.

Løsning

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. 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

close

Awesome!

Completion rate improved to 5.56

bookGrafutførelse

Sveip for å vise menyen

Funksjonsdekoratør

En funksjonsdekoratør er et verktøy som "omslutter" en funksjon for å endre dens oppførsel. I TensorFlow er den mest brukte dekoratøren @tf.function, som konverterer en Python-funksjon til en TensorFlow-graf.

Formål med @tf.function

Hovedformålet med å bruke dekoratører som @tf.function er å optimalisere beregninger. Når en funksjon dekoreres med @tf.function, konverterer TensorFlow funksjonen til en svært effektiv graf som kan kjøres mye raskere, spesielt for komplekse operasjoner. Denne konverteringen gjør det mulig for TensorFlow å utføre optimaliseringer og utnytte parallellisering, noe som er avgjørende for ytelse i maskinlæringsoppgaver.

Eksempel

Et eksempel er gitt for bedre forståelse.

1234567891011
import tensorflow as tf # Define a simple function and decorate it with `@tf.function` @tf.function def compute_area(radius): return 3.1415 * radius ** 2 # Call the function area = compute_area(tf.constant(3.0)) print(f"The area is: {area.numpy()}")
copy

I denne koden blir compute_area() konvertert til en TensorFlow-graf, noe som gjør at den kjører raskere og mer effektivt.

Hvordan fungerer grafutførelse?

TensorFlow opererer i to moduser: Eager Execution og Graph Execution. Som standard kjører TensorFlow i Eager Execution-modus, noe som betyr at operasjoner utføres etter hvert som de defineres, og gir et fleksibelt og intuitivt grensesnitt. Imidlertid kan Eager Execution være mindre effektivt for komplekse beregninger og store modeller.

Dette er hvor @tf.function og grafutførelse kommer inn. Når du bruker @tf.function-dekoren på en funksjon, konverterer TensorFlow funksjonen til en statisk beregningsgraf av operasjoner.

Optimaliseringsteknikker

  1. Grafoptimalisering: TensorFlow optimaliserer grafen ved å fjerne ubrukte noder, slå sammen dupliserte delgrafer og utføre andre optimaliseringer på grafnivå. Dette gir raskere kjøring og redusert minnebruk.
  2. Raskere kjøring: Grafer kjøres raskere enn umiddelbare operasjoner fordi de reduserer Python-overhead. Python er ikke involvert i utførelsen av grafen, noe som eliminerer overhead fra Python-tolkens kall.
  3. Parallellisering og distribusjon: Grafer gjør det enkelt for TensorFlow å identifisere muligheter for parallellisering og fordele beregninger på flere enheter, som CPU-er og GPU-er.
  4. Mellomlagring og gjenbruk: Når en funksjon dekorert med @tf.function kalles med samme input-signatur, gjenbruker TensorFlow den tidligere opprettede grafen, noe som sparer tid ved å unngå å lage grafen på nytt.

Eksempel med Gradient Tape

1234567891011
import tensorflow as tf @tf.function def compute_gradient(x): with tf.GradientTape() as tape: y = x * x * x return tape.gradient(y, x) x = tf.Variable(3.0) grad = compute_gradient(x) print(f"The gradient at x = {x.numpy()} is {grad.numpy()}")
copy

I dette eksemplet er compute_gradient en funksjon som beregner gradienten til y = x^3 ved et gitt punkt x. Dekoratoren @tf.function sikrer at funksjonen kjøres som en TensorFlow-graf.

Eksempel med betinget logikk

1234567891011121314
import tensorflow as tf @tf.function def compute_gradient_conditional(x): with tf.GradientTape() as tape: if tf.reduce_sum(x) > 0: y = x * x else: y = x * x * x return tape.gradient(y, x) x = tf.Variable([-2.0, 2.0]) grad = compute_gradient_conditional(x) print(f"The gradient at x = {x.numpy()} is {grad.numpy()}")
copy

I dette eksemplet beregner funksjonen ulike gradienter basert på en betingelse. TensorFlows @tf.function konverterer ikke bare det statiske beregningsdiagrammet, men håndterer også dynamiske elementer som betingelser og løkker effektivt.

Oppgave

Swipe to start coding

I denne oppgaven skal du sammenligne kjøretidene til to TensorFlow-funksjoner som utfører matrise-multiplikasjon: én med @tf.function-dekoratøren og én uten.

Steg

  1. Definer funksjonen matrix_multiply_optimized og sørg for at den inkluderer @tf.function-dekoratøren.
  2. Fullfør begge funksjonene ved å beregne gjennomsnittet av de resulterende matrisene.
  3. Generer to uniformt fordelte tilfeldige matriser ved å bruke TensorFlows funksjoner for generering av tilfeldige matriser.

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 2. Kapittel 2
single

single

some-alt