Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Grafkörning | Grunderna i TensorFlow
Introduktion till Tensorflow

bookGrafkörning

Funktionsdekoratör

En funktionsdekoratör är ett verktyg som "omsluter" en funktion för att modifiera dess beteende. I TensorFlow är den mest använda dekoratören @tf.function, som omvandlar en Python-funktion till en TensorFlow-graf.

Syfte med @tf.function

Det primära syftet med att använda dekoratörer som @tf.function är att optimera beräkningar. När en funktion dekoreras med @tf.function omvandlar TensorFlow funktionen till en mycket effektiv graf som kan köras betydligt snabbare, särskilt för komplexa operationer. Denna omvandling gör det möjligt för TensorFlow att tillämpa optimeringar och utnyttja parallellism, vilket är avgörande för prestanda vid maskininlärningsuppgifter.

Exempel

Ett exempel tillhandahålls för bättre förstå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 denna kod omvandlas compute_area() till en TensorFlow-graf, vilket gör att den körs snabbare och mer effektivt.

Hur fungerar grafkörning?

TensorFlow arbetar i två lägen: Eager Execution och Graph Execution. Som standard körs TensorFlow i Eager Execution-läge, vilket innebär att operationer utförs direkt när de definieras, vilket ger ett flexibelt och intuitivt gränssnitt. Dock kan Eager Execution vara mindre effektivt för komplexa beräkningar och storskaliga modeller.

Det är här @tf.function och grafkörning kommer in i bilden. När du använder dekoratorn @tf.function på en funktion omvandlar TensorFlow den funktionen till en statisk beräkningsgraf av operationer.

Optimeringstekniker

  1. Grafoptimering: TensorFlow optimerar grafen genom att ta bort oanvända noder, slå samman duplicerade delgrafer och utföra andra optimeringar på grafnivå. Detta resulterar i snabbare exekvering och minskad minnesanvändning.
  2. Snabbare exekvering: Grafer exekveras snabbare än omedelbara operationer eftersom de minskar Python-överhuvudet. Python är inte involverat i exekveringen av grafen, vilket eliminerar överhuvudet från Python-tolkens anrop.
  3. Parallellism och distribution: Grafer gör det möjligt för TensorFlow att enkelt identifiera möjligheter till parallellism och fördela beräkningar över flera enheter, såsom CPU:er och GPU:er.
  4. Caching och återanvändning: När en funktion dekorerad med @tf.function anropas med samma inmatningssignatur återanvänder TensorFlow den tidigare skapade grafen, vilket undviker behovet av att återskapa grafen och sparar tid.

Exempel 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 det här exemplet är compute_gradient en funktion som beräknar derivatan av y = x^3 vid en given punkt x. Dekoratorn @tf.function säkerställer att funktionen körs som en TensorFlow-graf.

Exempel med villkorslogik

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 det här exemplet beräknar funktionen olika gradienter baserat på ett villkor. TensorFlows @tf.function konverterar inte bara den statiska beräkningsgrafen utan hanterar även dynamiska element som villkorssatser och loopar effektivt.

Uppgift

Swipe to start coding

I denna uppgift ska du jämföra exekveringstiderna för två TensorFlow-funktioner som utför matrismultiplikation: en med @tf.function-dekoration och en utan.

Steg

  1. Definiera funktionen matrix_multiply_optimized och säkerställ att den inkluderar @tf.function-dekorationen.
  2. Komplettera båda funktionerna genom att beräkna medelvärdet av de resulterande matriserna.
  3. Generera två jämnt fördelade slumpmatriser med TensorFlows funktioner för slumpmässig matrisgenerering.

Lösning

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 2
single

single

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Suggested prompts:

Can you explain the difference between Eager Execution and Graph Execution in more detail?

How does TensorFlow handle conditionals and loops inside a @tf.function?

Can you provide more examples of using @tf.function with different types of functions?

close

Awesome!

Completion rate improved to 5.56

bookGrafkörning

Svep för att visa menyn

Funktionsdekoratör

En funktionsdekoratör är ett verktyg som "omsluter" en funktion för att modifiera dess beteende. I TensorFlow är den mest använda dekoratören @tf.function, som omvandlar en Python-funktion till en TensorFlow-graf.

Syfte med @tf.function

Det primära syftet med att använda dekoratörer som @tf.function är att optimera beräkningar. När en funktion dekoreras med @tf.function omvandlar TensorFlow funktionen till en mycket effektiv graf som kan köras betydligt snabbare, särskilt för komplexa operationer. Denna omvandling gör det möjligt för TensorFlow att tillämpa optimeringar och utnyttja parallellism, vilket är avgörande för prestanda vid maskininlärningsuppgifter.

Exempel

Ett exempel tillhandahålls för bättre förstå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 denna kod omvandlas compute_area() till en TensorFlow-graf, vilket gör att den körs snabbare och mer effektivt.

Hur fungerar grafkörning?

TensorFlow arbetar i två lägen: Eager Execution och Graph Execution. Som standard körs TensorFlow i Eager Execution-läge, vilket innebär att operationer utförs direkt när de definieras, vilket ger ett flexibelt och intuitivt gränssnitt. Dock kan Eager Execution vara mindre effektivt för komplexa beräkningar och storskaliga modeller.

Det är här @tf.function och grafkörning kommer in i bilden. När du använder dekoratorn @tf.function på en funktion omvandlar TensorFlow den funktionen till en statisk beräkningsgraf av operationer.

Optimeringstekniker

  1. Grafoptimering: TensorFlow optimerar grafen genom att ta bort oanvända noder, slå samman duplicerade delgrafer och utföra andra optimeringar på grafnivå. Detta resulterar i snabbare exekvering och minskad minnesanvändning.
  2. Snabbare exekvering: Grafer exekveras snabbare än omedelbara operationer eftersom de minskar Python-överhuvudet. Python är inte involverat i exekveringen av grafen, vilket eliminerar överhuvudet från Python-tolkens anrop.
  3. Parallellism och distribution: Grafer gör det möjligt för TensorFlow att enkelt identifiera möjligheter till parallellism och fördela beräkningar över flera enheter, såsom CPU:er och GPU:er.
  4. Caching och återanvändning: När en funktion dekorerad med @tf.function anropas med samma inmatningssignatur återanvänder TensorFlow den tidigare skapade grafen, vilket undviker behovet av att återskapa grafen och sparar tid.

Exempel 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 det här exemplet är compute_gradient en funktion som beräknar derivatan av y = x^3 vid en given punkt x. Dekoratorn @tf.function säkerställer att funktionen körs som en TensorFlow-graf.

Exempel med villkorslogik

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 det här exemplet beräknar funktionen olika gradienter baserat på ett villkor. TensorFlows @tf.function konverterar inte bara den statiska beräkningsgrafen utan hanterar även dynamiska element som villkorssatser och loopar effektivt.

Uppgift

Swipe to start coding

I denna uppgift ska du jämföra exekveringstiderna för två TensorFlow-funktioner som utför matrismultiplikation: en med @tf.function-dekoration och en utan.

Steg

  1. Definiera funktionen matrix_multiply_optimized och säkerställ att den inkluderar @tf.function-dekorationen.
  2. Komplettera båda funktionerna genom att beräkna medelvärdet av de resulterande matriserna.
  3. Generera två jämnt fördelade slumpmatriser med TensorFlows funktioner för slumpmässig matrisgenerering.

Lösning

Switch to desktopByt till skrivbordet för praktisk övningFortsätt där du är med ett av alternativen nedan
Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 2
single

single

some-alt