Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Graafuitvoering | Basisprincipes van TensorFlow
Introductie tot TensorFlow

bookGraafuitvoering

Functiedecorator

Een functiedecorator is een hulpmiddel dat een functie 'omsluit' om het gedrag ervan aan te passen. In TensorFlow is de meest gebruikte decorator @tf.function, die een Python-functie omzet in een TensorFlow-grafiek.

Doel van @tf.function

Het belangrijkste doel van het gebruik van decorators zoals @tf.function is het optimaliseren van berekeningen. Wanneer een functie wordt gedecoreerd met @tf.function, zet TensorFlow de functie om in een zeer efficiënte grafiek die veel sneller kan worden uitgevoerd, vooral bij complexe bewerkingen. Deze omzetting stelt TensorFlow in staat om optimalisaties toe te passen en parallelisme te benutten, wat essentieel is voor prestaties bij machine learning-taken.

Voorbeeld

Een voorbeeld wordt gegeven ter verduidelijking.

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

In deze code wordt compute_area() omgezet in een TensorFlow-grafiek, waardoor deze sneller en efficiënter wordt uitgevoerd.

Hoe werkt grafiekuitvoering?

TensorFlow werkt in twee modi: Eager Execution en Graph Execution. Standaard draait TensorFlow in Eager Execution-modus, wat betekent dat bewerkingen worden uitgevoerd zodra ze zijn gedefinieerd, wat een flexibele en intuïtieve interface biedt. Echter, Eager Execution kan minder efficiënt zijn voor complexe berekeningen en grootschalige modellen.

Hier komen @tf.function en Graph Execution in beeld. Wanneer de decorateur @tf.function op een functie wordt toegepast, zet TensorFlow die functie om in een statische berekeningsgrafiek van operaties.

Optimalisatietechnieken

  1. Grafiekoptimalisatie: TensorFlow optimaliseert de grafiek door ongebruikte knooppunten te verwijderen, dubbele subgrafieken samen te voegen en andere optimalisaties op grafiekniveau uit te voeren. Dit resulteert in snellere uitvoering en verminderd geheugengebruik.
  2. Snellere uitvoering: grafieken worden sneller uitgevoerd dan eager-operaties omdat ze de overhead van Python verminderen. Python is niet betrokken bij de uitvoering van de grafiek, waardoor de overhead van Python-interpreteraanroepen wordt geëlimineerd.
  3. Parallelisme en distributie: grafieken stellen TensorFlow in staat om eenvoudig kansen voor parallelisme te identificeren en berekeningen te verdelen over meerdere apparaten, zoals CPU's en GPU's;
  4. Caching en hergebruik: wanneer een functie met @tf.function wordt aangeroepen met dezelfde input-handtekening, hergebruikt TensorFlow de eerder aangemaakte grafiek, waardoor het opnieuw aanmaken van de grafiek wordt vermeden en tijd wordt bespaard.

Voorbeeld met 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

In dit voorbeeld is compute_gradient een functie die de gradiënt van y = x^3 berekent op een gegeven punt x. De @tf.function decorator zorgt ervoor dat de functie wordt uitgevoerd als een TensorFlow-grafiek.

Voorbeeld met Conditionele Logica

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

In dit voorbeeld berekent de functie verschillende gradiënten op basis van een voorwaarde. TensorFlow's @tf.function zet niet alleen het statische computationele graaf om, maar behandelt ook dynamische elementen zoals conditionals en lussen effectief.

Taak

Swipe to start coding

In deze taak vergelijk je de uitvoeringstijden van twee TensorFlow-functies die matrixvermenigvuldiging uitvoeren: één met de @tf.function-decorator en één zonder.

Stappen

  1. Definieer de functie matrix_multiply_optimized en zorg ervoor dat deze de @tf.function-decorator bevat.
  2. Maak beide functies compleet door het gemiddelde van de resulterende matrices te berekenen.
  3. Genereer twee uniform verdeelde willekeurige matrices met behulp van TensorFlow's functies voor het genereren van willekeurige matrices.

Oplossing

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 2. Hoofdstuk 2
single

single

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

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

bookGraafuitvoering

Veeg om het menu te tonen

Functiedecorator

Een functiedecorator is een hulpmiddel dat een functie 'omsluit' om het gedrag ervan aan te passen. In TensorFlow is de meest gebruikte decorator @tf.function, die een Python-functie omzet in een TensorFlow-grafiek.

Doel van @tf.function

Het belangrijkste doel van het gebruik van decorators zoals @tf.function is het optimaliseren van berekeningen. Wanneer een functie wordt gedecoreerd met @tf.function, zet TensorFlow de functie om in een zeer efficiënte grafiek die veel sneller kan worden uitgevoerd, vooral bij complexe bewerkingen. Deze omzetting stelt TensorFlow in staat om optimalisaties toe te passen en parallelisme te benutten, wat essentieel is voor prestaties bij machine learning-taken.

Voorbeeld

Een voorbeeld wordt gegeven ter verduidelijking.

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

In deze code wordt compute_area() omgezet in een TensorFlow-grafiek, waardoor deze sneller en efficiënter wordt uitgevoerd.

Hoe werkt grafiekuitvoering?

TensorFlow werkt in twee modi: Eager Execution en Graph Execution. Standaard draait TensorFlow in Eager Execution-modus, wat betekent dat bewerkingen worden uitgevoerd zodra ze zijn gedefinieerd, wat een flexibele en intuïtieve interface biedt. Echter, Eager Execution kan minder efficiënt zijn voor complexe berekeningen en grootschalige modellen.

Hier komen @tf.function en Graph Execution in beeld. Wanneer de decorateur @tf.function op een functie wordt toegepast, zet TensorFlow die functie om in een statische berekeningsgrafiek van operaties.

Optimalisatietechnieken

  1. Grafiekoptimalisatie: TensorFlow optimaliseert de grafiek door ongebruikte knooppunten te verwijderen, dubbele subgrafieken samen te voegen en andere optimalisaties op grafiekniveau uit te voeren. Dit resulteert in snellere uitvoering en verminderd geheugengebruik.
  2. Snellere uitvoering: grafieken worden sneller uitgevoerd dan eager-operaties omdat ze de overhead van Python verminderen. Python is niet betrokken bij de uitvoering van de grafiek, waardoor de overhead van Python-interpreteraanroepen wordt geëlimineerd.
  3. Parallelisme en distributie: grafieken stellen TensorFlow in staat om eenvoudig kansen voor parallelisme te identificeren en berekeningen te verdelen over meerdere apparaten, zoals CPU's en GPU's;
  4. Caching en hergebruik: wanneer een functie met @tf.function wordt aangeroepen met dezelfde input-handtekening, hergebruikt TensorFlow de eerder aangemaakte grafiek, waardoor het opnieuw aanmaken van de grafiek wordt vermeden en tijd wordt bespaard.

Voorbeeld met 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

In dit voorbeeld is compute_gradient een functie die de gradiënt van y = x^3 berekent op een gegeven punt x. De @tf.function decorator zorgt ervoor dat de functie wordt uitgevoerd als een TensorFlow-grafiek.

Voorbeeld met Conditionele Logica

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

In dit voorbeeld berekent de functie verschillende gradiënten op basis van een voorwaarde. TensorFlow's @tf.function zet niet alleen het statische computationele graaf om, maar behandelt ook dynamische elementen zoals conditionals en lussen effectief.

Taak

Swipe to start coding

In deze taak vergelijk je de uitvoeringstijden van twee TensorFlow-functies die matrixvermenigvuldiging uitvoeren: één met de @tf.function-decorator en één zonder.

Stappen

  1. Definieer de functie matrix_multiply_optimized en zorg ervoor dat deze de @tf.function-decorator bevat.
  2. Maak beide functies compleet door het gemiddelde van de resulterende matrices te berekenen.
  3. Genereer twee uniform verdeelde willekeurige matrices met behulp van TensorFlow's functies voor het genereren van willekeurige matrices.

Oplossing

Switch to desktopSchakel over naar desktop voor praktijkervaringGa verder vanaf waar je bent met een van de onderstaande opties
Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 2. Hoofdstuk 2
single

single

some-alt