计算张量流中渴望执行的中间节点的梯度

时间:2018-07-24 13:10:52

标签: tensorflow

我使用tensorflow急切执行来执行以下计算:

y = x^2
z = y + 2.

我的目标是计算dz / dx和dz / dy(z在y和z上的梯度)

dx, dy = GradientTape.gradient(z, [x, y]). 

但是,仅计算dy,而dx为None。即,仅可以计算直接依赖于z的张量的梯度。

[None, <tf.Tensor: id=11, shape=(), dtype=float32, numpy=1.0>]
[None, <tf.Tensor: id=11, shape=(), dtype=float32, numpy=1.0>]
[None, <tf.Tensor: id=11, shape=(), dtype=float32, numpy=1.0>]
[None, <tf.Tensor: id=11, shape=(), dtype=float32, numpy=1.0>]
[None, <tf.Tensor: id=11, shape=(), dtype=float32, numpy=1.0>]

以下是完整的代码。

from __future__ import absolute_import, division, print_function
import tensorflow as tf

tf.enable_eager_execution()
tfe = tf.contrib.eager

import os

os.environ["CUDA_VISIBLE_DEVICES"] = "6"
import warnings

warnings.filterwarnings('ignore')

train_steps = 5

for i in range(train_steps):

    x = tf.contrib.eager.Variable(0.)
    with tf.GradientTape() as tape:
        y = tf.square(x)
        z = y + 2

    print(tape.gradient(z, [x,y]))

有解决方案吗?

0 个答案:

没有答案