Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 张量流只区分向量的元素_Python_Tensorflow - Fatal编程技术网

Python 张量流只区分向量的元素

Python 张量流只区分向量的元素,python,tensorflow,Python,Tensorflow,我想了解张量流微分在向量元素上的行为。 这是我的密码 w=tf.Variable([[1.0,2.3],[4.5,6.7]],dtype=tf.float32) x=tf.constant([[1.2],[2.3]],dtype=tf.float32) with tf.GradientTape() as tape: y=tf.matmul(w,x) d=tape.gradient(y[0],w) y是2x1张量。当区分y[0]w.r.t w即y的单个元素时,我得到None。 d这里没有

我想了解张量流微分在向量元素上的行为。 这是我的密码

w=tf.Variable([[1.0,2.3],[4.5,6.7]],dtype=tf.float32)
x=tf.constant([[1.2],[2.3]],dtype=tf.float32)
with tf.GradientTape() as tape:
    y=tf.matmul(w,x)
d=tape.gradient(y[0],w)
y2x1张量。当区分y[0]w.r.t w即y的单个元素时,我得到Noned这里没有。
我不能理解这种行为y[0]取决于w,为什么我仍然得到None

你没有得到,因为访问张量的子元素实际上是一个需要在
tf.GradientTape
上下文中完成的操作。否则,磁带不知道导致该变量的历史记录

您的示例类似于这样做:

w=tf.Variable([[1.0,2.3],[4.5,6.7]],dtype=tf.float32)
x=tf.constant([[1.2],[2.3]],dtype=tf.float32)
with tf.GradientTape() as tape:
    y=tf.matmul(w,x)
d=tape.gradient(y+2,w)
磁带没有观察操作
y+2
,因此无法计算梯度

要仅获取一个元素的渐变,需要在磁带的上下文中显式获取该元素:

w=tf.Variable([[1.0,2.3],[4.5,6.7]],dtype=tf.float32)
x=tf.constant([[1.2],[2.3]],dtype=tf.float32)
with tf.GradientTape() as tape:
    y=tf.matmul(w,x)
    y0 = y[0]
d=tape.gradient(y0,w)
然后,得到
y[0]
w.r.t
w
的梯度:

>>> d
<tf.Tensor: shape=(2, 2), dtype=float32, numpy=
array([[1.2, 2.3],
       [0. , 0. ]], dtype=float32)>
>>d