single
Gradiententape
Veeg om het menu te tonen
Gradient Tape
Inzicht in fundamentele tensorbewerkingen maakt het mogelijk om deze processen te stroomlijnen en te versnellen met behulp van ingebouwde TensorFlow-functionaliteiten. Het eerste van deze geavanceerde hulpmiddelen dat wordt behandeld is Gradient Tape.
Wat is Gradient Tape?
Dit hoofdstuk behandelt een van de fundamentele concepten in TensorFlow, de Gradient Tape. Deze functionaliteit is essentieel voor het begrijpen en toepassen van gradient-gebaseerde optimalisatietechnieken, met name in deep learning.
Gradient Tape in TensorFlow is een hulpmiddel dat bewerkingen registreert voor automatische differentiatie. Wanneer bewerkingen binnen een Gradient Tape-blok worden uitgevoerd, houdt TensorFlow alle uitgevoerde berekeningen bij. Dit is vooral nuttig bij het trainen van machine learning-modellen, waarbij gradiënten nodig zijn om modelparameters te optimaliseren.
In essentie is een gradiënt een verzameling partiële afgeleiden.
Gebruik van Gradient Tape
Voor het gebruik van Gradient Tape, volg deze stappen:
- Maak een Gradient Tape-blok aan: gebruik
with tf.GradientTape() as tape:. Binnen dit blok worden alle berekeningen gevolgd; - Definieer de berekeningen: voer operaties uit met tensors binnen het blok (bijvoorbeeld het definiëren van een forward pass van een neuraal netwerk);
- Bereken de gradiënten: gebruik
tape.gradient(target, sources)om de gradiënten van het doelwit ten opzichte van de bronnen te berekenen.
Eenvoudige gradiëntberekening
Een eenvoudig voorbeeld om dit beter te begrijpen.
123456789101112131415import 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()}')
Deze code berekent de gradiënt van y = x^2 bij x = 3. Dit is hetzelfde als de partiële afgeleide van y ten opzichte van x.
Meerdere partiële afgeleiden
Wanneer de output wordt beïnvloed door meerdere invoervariabelen, kan een partiële afgeleide worden berekend ten opzichte van elk van deze invoervariabelen (of slechts een geselecteerde subset). Dit wordt bereikt door een lijst van variabelen op te geven als de parameter sources.
De uitvoer van deze bewerking zal een overeenkomstige lijst van tensors zijn, waarbij elke tensor de partiële afgeleide voorstelt ten opzichte van elk van de in sources opgegeven variabelen.
1234567891011121314151617import 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()}")
Deze code berekent de gradiënt van de functie y = sum(x^2 + 2*z) voor gegeven waarden van x en z. In dit voorbeeld wordt de gradiënt van x weergegeven als een 2D-tensor, waarbij elk element overeenkomt met de partiële afgeleide van de respectievelijke waarde in de oorspronkelijke x-matrix.
De gradiënt berekenen ten opzichte van x
Wanneer we de afgeleide van y ten opzichte van x berekenen, vragen we ons in feite af: "Als we de waarde van x een beetje veranderen, hoeveel verandert y dan?" De bewerking op x is kwadrateren (x^2), dus de afgeleide vertelt ons dat voor elke eenheidstoename in x, y zal toenemen met 2*x.
Aangezien alle elementen van x gelijk zijn aan 3.0:
- De gradiënt van elk element is
2*3.0 = 6.0; - De gradiëntmatrix ten opzichte van
xheeft dezelfde vorm alsxzelf (2x3), waarbij elk element 6.0 is. Dit geeft aan dat het verhogen van elk afzonderlijk element vanxmet 1,ymet 6 eenheden zou verhogen.
De gradiënt berekenen ten opzichte van z
Voor z bekijken we hoe veranderingen in z van invloed zijn op y. Omdat z wordt opgeteld bij elk gekwadrateerd element van x (na verdubbeling), vragen we ons in feite af: "Als z met 1 toeneemt, hoeveel neemt y dan toe?" Volgens de regels van broadcasting wordt 2*z opgeteld bij elk element van x^2, alsof we een matrix hebben ter grootte van x, gevuld met 2*z.
- De bewerking van
2*zten opzichte vanzis eenvoudig: de afgeleide is 2, omdat2*zmet 2 eenheden verandert voor elke eenheidstoename inz; - Omdat deze bewerking echter elk element van de matrix
xbeïnvloedt, is de totale verandering inyvoor een eenheidstoename inzgelijk aan2maal het aantal elementen inx(dat is 6, van de 2x3 matrix). Dus de totale gradiënt ten opzichte vanzis2*6 = 12. Dit betekent dat het verhogen vanzmet 1 eenheid,ymet 12 eenheden verhoogt, wat het gecombineerde effect van de verandering over alle elementen vanxweerspiegelt.
Samenvatting
- De gradiënt ten opzichte van
xis een matrix die laat zien hoe een eenheidstoename in elk element vanxleidt tot een toename van 6 eenheden iny, wat de directe relatie tussen veranderingen inxen veranderingen inyweergeeft; - De gradiënt ten opzichte van
zis een scalair (12), die het totale effect toont van een eenheidstoename inzopy, rekening houdend met de impact over de gehele matrixx.
Voor meer informatie over de mogelijkheden van Gradient Tape, waaronder hogere-orde afgeleiden en het extraheren van de Jacobiaanmatrix, raadpleeg de officiële TensorFlow documentation.
Veeg om te beginnen met coderen
Je doel is om de gradiënt (afgeleide) van een gegeven wiskundige functie op een specifiek punt te berekenen met behulp van TensorFlow's Gradient Tape. De functie en het punt worden gegeven, en je zult zien hoe je TensorFlow gebruikt om de gradiënt op dat punt te vinden.
Beschouw een kwadratische functie van één variabele x, gedefinieerd als:
f(x) = x^2 + 2x - 1
Je taak is om de afgeleide van deze functie te berekenen bij x = 2.
Stappen
- Definieer de variabele
xop het punt waar je de afgeleide wilt berekenen. - Gebruik Gradient Tape om de berekening van de functie
f(x)vast te leggen. - Bereken de gradiënt van
f(x)op het gespecificeerde punt.
Opmerking
De gradiënt kan alleen worden berekend voor waarden van het floating-point type.

Oplossing
Bedankt voor je feedback!
single
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.