На этом шаге мы рассмотрим назначение этого объекта.
Роль интерфейса для управления мощными возможностями автоматического дифференцирования в TensorFlow играет GradientTape. Это объект на Python, который "записывает" выполняемые тензорные операции в форме графа вычислений (иногда называемого tape - лентой). Этот граф затем можно использовать для получения градиента любого результата относительно любой переменной или набора переменных (экземпляров класса tf.Variable). Класс tf.Variable представляет особый вид тензора, предназначенный для хранения изменяемого состояния: например, веса нейронной сети всегда являются экземплярами tf.Variable.
import tensorflow as tf x = tf.Variable(0.) # Создать экземпляр Variable со скалярным значением 0 with tf.GradientTape() as tape: # Открыть контекст GradientTape y = 2 * x + 3 # Применить некоторые тензорные операции к # нашей переменной внутри контекста grad_of_y_wrt_x = tape.gradient(y, x) # Использовать экземпляр tape # для извлечения градиента выходного # значения y относительно переменной x
GradientTape работает с тензорными операциями:
# Создать экземпляр Variable с формой (2, 2) и с # нулевыми начальными значениями элементов x = tf.Variable(tf.random.uniform((2, 2))) with tf.GradientTape() as tape: y = 2 * x + 3 # grad_of_y_wrt_x - тензор с формой (2, 2) как x, описывающий # кривизну y = 2 * a + 3 в окрестностях x = [[0, 0], [0, 0]] grad_of_y_wrt_x = tape.gradient(y, x)
И со списками переменных:
W = tf.Variable(tf.random.uniform((2, 2))) b = tf.Variable(tf.zeros((2,))) x = tf.random.uniform((2, 2)) with tf.GradientTape() as tape: # matmul - так называется скалярное произведение в TensorFlow y = tf.matmul(x, W) + b # grad_of_y_wrt_W_and_b - это список с двумя тензорами, формы # которых совпадают с формами W и b соответственно grad_of_y_wrt_W_and_b = tape.gradient(y, [W, b])
В следующих шагах мы поближе познакомимся с GradientTape.
На следующем шаге мы подведем некоторые итоги.