Tensorflow: что делает output_gradient в GradientTape().gradient?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Tensorflow: что делает output_gradient в GradientTape().gradient?

Сообщение Anonymous »

Мне было интересно, что делает аргумент output_gradients в функции градиента объекта GradientTape в тензорном потоке. Согласно https://www.tensorflow.org/api_docs/pyt ... e#gradient, эта переменная должна содержать «список градиентов, по одному для каждого дифференцируемого элемента цели».
Ее значение по умолчанию — None. .
Не очень понятно, что именно это делает.
Когда я опускаю аргумент, функция вычисляет якобиан относительно некоторой функции , например z None:
gamma = 1
xi_transform = gpflow.optimizers.natgrad.XiNat()

dL_dmean = gpflow.base._to_constrained(q_mu_grad, q_mu.transform)
dL_dvarsqrt = gpflow.base._to_constrained(q_sqrt_grad, q_sqrt.transform)

with tf.GradientTape(persistent=True, watch_accessed_variables=False) as tape:
tape.watch([q_mu.unconstrained_variable, q_sqrt.unconstrained_variable])
eta1, eta2 = gpflow.optimizers.natgrad.meanvarsqrt_to_expectation(q_mu, q_sqrt)
meanvarsqrt = gpflow.optimizers.natgrad.expectation_to_meanvarsqrt(eta1, eta2)

dL_deta1, dL_deta2 = tape.gradient(
meanvarsqrt, [eta1, eta2], output_gradients=[dL_dmean, dL_dvarsqrt]
)

dtheta_deta1, dtheta_deta2 = tape.gradient(
meanvarsqrt, [eta1, eta2], output_gradients=None
)

return dL_deta1, dL_deta2, dtheta_deta1, dtheta_deta2

X_data = tf.ones(5)
num_latent_gps = 1
static_num_data = X_data.shape[0]
q_sqrt_unconstrained_shape = (num_latent_gps, gpflow.utilities.triangular_size(static_num_data))
num_data = gpflow.Parameter(tf.shape(X_data)[0], shape=[], dtype=tf.int32, trainable=False)
dynamic_num_data = tf.convert_to_tensor(num_data)

mu = np.array([[0.93350756], [0.15833747], [0.23830378], [0.28742445], [0.14999759]])
q_mu = gpflow.Parameter(mu, shape=(static_num_data, num_latent_gps))
q_sqrt = tf.eye(dynamic_num_data, batch_shape=[num_latent_gps])
q_sqrt = gpflow.Parameter(
q_sqrt,
transform=gpflow.utilities.triangular(),
unconstrained_shape=q_sqrt_unconstrained_shape,
constrained_shape=(num_latent_gps, static_num_data, static_num_data),
)

q_mu_grad = q_mu.unconstrained_variable * 0.33
q_sqrt_grad = q_sqrt.unconstrained_variable

dL_deta1, dL_deta2, dtheta_deta1, dtheta_deta2 = natgrad_apply_gradients(q_mu_grad, q_sqrt_grad, q_mu, q_sqrt)

dL_deta1 !== dtheta_deta1 * q_mu_grad
[/code]
Надеюсь, что кто-нибудь знает и заранее благодарен!


Подробнее здесь: https://stackoverflow.com/questions/786 ... e-gradient
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»