single
Gradientband
Svep för att visa menyn
Gradient Tape
Förståelse för grundläggande tensoroperationer möjliggör vidareutveckling mot att effektivisera och påskynda dessa processer med hjälp av inbyggda TensorFlow-funktioner. Det första av dessa avancerade verktyg att utforska är Gradient Tape.
Vad är Gradient Tape?
Detta kapitel går igenom ett av de grundläggande koncepten i TensorFlow, Gradient Tape. Denna funktion är avgörande för att förstå och implementera gradientbaserade optimeringstekniker, särskilt inom djupinlärning.
Gradient Tape i TensorFlow är ett verktyg som registrerar operationer för automatisk differentiering. När operationer utförs inom ett Gradient Tape-block spårar TensorFlow alla beräkningar som sker. Detta är särskilt användbart vid träning av maskininlärningsmodeller, där gradienter behövs för att optimera modellparametrar.
I grunden är en gradient en uppsättning partiella derivator.
Användning av Gradient Tape
För att använda Gradient Tape, följ dessa steg:
- Skapa ett Gradient Tape-block: använd
with tf.GradientTape() as tape:. Inuti detta block spåras alla beräkningar; - Definiera beräkningarna: utför operationer med tensorer inom blocket (t.ex. definiera ett framåtpass av ett neuralt nätverk);
- Beräkna gradienter: använd
tape.gradient(target, sources)för att beräkna gradienterna av målet med avseende på källorna.
Enkel gradientberäkning
Ett enkelt exempel för att förstå detta bättre.
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()}')
Denna kod beräknar gradienten av y = x^2 vid x = 3. Detta är samma sak som den partiella derivatan av y med avseende på x.
Flera partiella derivator
När utdata påverkas av flera indata kan en partiell derivata beräknas med avseende på var och en av dessa indata (eller bara några utvalda). Detta uppnås genom att ange en lista av variabler som parametern sources.
Utdata från denna operation kommer att vara en motsvarande lista av tensorer, där varje tensor representerar den partiella derivatan med avseende på var och en av variablerna som anges i sources.
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()}")
Denna kod beräknar gradienten av funktionen y = sum(x^2 + 2*z) för givna värden av x och z. I detta exempel visas gradienten av x som en 2D-tensor, där varje element motsvarar partiell derivata för respektive värde i den ursprungliga x-matrisen.
Beräkning av gradienten med avseende på x
När vi beräknar derivatan av y med avseende på x frågar vi oss i princip: "Om vi ändrar värdet på x lite, hur mycket förändras y?" Operationen på x är upphöjt till två (x^2), så derivatan visar att för varje enhetsökning i x ökar y med 2*x.
Eftersom alla element i x är 3.0:
- Varje elements gradient är
2*3.0 = 6.0; - Gradientmatrisen med avseende på
xhar samma form somxsjälv (2x3), där varje element är 6.0. Detta indikerar att om man ökar ett enskilt element ixmed 1, ökarymed 6 enheter.
Beräkning av gradienten med avseende på z
För z undersöker vi hur förändringar i z påverkar y. Eftersom z adderas till varje kvadrerat element av x (efter fördubbling), frågar vi oss: "Om z ökar med 1, hur mycket ökar y?" Enligt reglerna för broadcasting adderas 2*z till varje element i x^2, som om vi hade en matris av samma storlek som x, fylld med 2*z.
- Operationen
2*zmed avseende påzär enkel: dess derivata är 2 eftersom2*zförändras med 2 enheter för varje enhetsförändring iz; - Eftersom denna operation påverkar varje element i matrisen
x, är den totala förändringen iyför en enhetsförändring iz2gånger antalet element ix(vilket är 6, från 2x3-matrisen). Därför är den totala gradienten med avseende påz2*6 = 12. Detta innebär att om man ökarzmed 1 enhet ökarymed 12 enheter, vilket återspeglar den samlade effekten av förändringen över alla element ix.
Sammanfattning
- Gradienten med avseende på
xär en matris som visar hur en enhetsökning i ett element avxleder till en 6-enhetsökning iy, vilket återspeglar det direkta sambandet mellan förändringar ixoch förändringar iy; - Gradienten med avseende på
zär en skalär (12), som visar den totala effekten av en enhetsökning izpåy, med hänsyn till påverkan över hela matrisenx.
För ytterligare insikter om Gradient Tape-funktioner, inklusive högre ordningens derivator och extrahering av Jacobimatrisen, se den officiella TensorFlow documentation.
Svep för att börja koda
Målet är att beräkna derivatan (gradienten) av en given matematisk funktion vid en specificerad punkt med hjälp av TensorFlows Gradient Tape. Funktionen och punkten kommer att anges, och du får se hur TensorFlow används för att hitta gradienten vid den punkten.
Betrakta en kvadratisk funktion av en variabel x, definierad som:
f(x) = x^2 + 2x - 1
Din uppgift är att beräkna derivatan av denna funktion vid x = 2.
Steg
- Definiera variabeln
xvid den punkt där du vill beräkna derivatan. - Använd Gradient Tape för att spela in beräkningen av funktionen
f(x). - Beräkna gradienten av
f(x)vid den angivna punkten.
Observera
Gradient kan endast beräknas för värden av flyttalstyp.

Lösning
Tack för dina kommentarer!
single
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal