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 direct worden uitgevoerd zoals ze zijn gedefinieerd. Dit biedt een flexibele en intuïtieve interface. 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 @tf.function-decorator op een functie wordt toegepast, zet TensorFlow die functie om in een statische berekeningsgrafiek van operaties.

Optimalisatietechnieken

  1. Graafoptimalisatie: TensorFlow optimaliseert de graaf door ongebruikte knooppunten te verwijderen, dubbele subgrafen samen te voegen en andere optimalisaties op graafniveau uit te voeren. Dit resulteert in snellere uitvoering en verminderd geheugengebruik.
  2. Snellere uitvoering: Grafen worden sneller uitgevoerd dan eager-operaties omdat ze de overhead van Python verminderen. Python is niet betrokken bij de uitvoering van de graaf, waardoor de overhead van Python-interpreteraanroepen wordt geëlimineerd.
  3. Parallelisme en distributie: Grafen stellen TensorFlow in staat om eenvoudig mogelijkheden 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 signature, hergebruikt TensorFlow de eerder aangemaakte graaf, waardoor het niet nodig is om de graaf opnieuw te maken 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 3. Hoofdstuk 3
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 more about how @tf.function improves performance?

What are some limitations or caveats of using @tf.function?

Can you show more examples of using decorators in TensorFlow?

close

Awesome!

Completion rate improved to 6.25

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 direct worden uitgevoerd zoals ze zijn gedefinieerd. Dit biedt een flexibele en intuïtieve interface. 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 @tf.function-decorator op een functie wordt toegepast, zet TensorFlow die functie om in een statische berekeningsgrafiek van operaties.

Optimalisatietechnieken

  1. Graafoptimalisatie: TensorFlow optimaliseert de graaf door ongebruikte knooppunten te verwijderen, dubbele subgrafen samen te voegen en andere optimalisaties op graafniveau uit te voeren. Dit resulteert in snellere uitvoering en verminderd geheugengebruik.
  2. Snellere uitvoering: Grafen worden sneller uitgevoerd dan eager-operaties omdat ze de overhead van Python verminderen. Python is niet betrokken bij de uitvoering van de graaf, waardoor de overhead van Python-interpreteraanroepen wordt geëlimineerd.
  3. Parallelisme en distributie: Grafen stellen TensorFlow in staat om eenvoudig mogelijkheden 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 signature, hergebruikt TensorFlow de eerder aangemaakte graaf, waardoor het niet nodig is om de graaf opnieuw te maken 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 3. Hoofdstuk 3
single

single

some-alt