Шаг 54.
Глубокое обучение на Python. Математические основы нейронных сетей. ... . Объект GradientTape в TensorFlow

    На этом шаге мы рассмотрим назначение этого объекта.

    Роль интерфейса для управления мощными возможностями автоматического дифференцирования в 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.

    На следующем шаге мы подведем некоторые итоги.




Предыдущий шаг Содержание Следующий шаг