Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.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 为什么“tf.tile”会在所有副本中传播渐变?_Python_Tensorflow - Fatal编程技术网

Python 为什么“tf.tile”会在所有副本中传播渐变?

Python 为什么“tf.tile”会在所有副本中传播渐变?,python,tensorflow,Python,Tensorflow,我试图理解Tensorflow是如何通过函数传播梯度的,具体地说是tf.tile。我想做的很简单: 考虑到批次大小为3:“ #案例1: a=tf.常数([[1,1.5],[2,2.5],[3,3.5],[[4,4.5],[5,5.5],[6,6.5],[7,7.5],[8,8.5],[9,9.5])#形状[3,3,2] b=tf.常数([[0.1]、[0.2]、[0.3]、[[0.4]、[0.5]、[0.6]、[[0.7]、[0.8]、[0.9]])#形状[3,3,1] “”“我想要的是c=a+

我试图理解Tensorflow是如何通过函数传播梯度的,具体地说是
tf.tile
。我想做的很简单:

考虑到批次大小为3:“ #案例1: a=tf.常数([[1,1.5],[2,2.5],[3,3.5],[[4,4.5],[5,5.5],[6,6.5],[7,7.5],[8,8.5],[9,9.5])#形状[3,3,2] b=tf.常数([[0.1]、[0.2]、[0.3]、[[0.4]、[0.5]、[0.6]、[[0.7]、[0.8]、[0.9]])#形状[3,3,1] “”“我想要的是c=a+b,所以我平铺b以匹配a的最后一个维度:”“” b#tile=tf.tile(b[1,1,tf.shape(a)[-1]])#shape[3,3,2] c=a+b#瓷砖#形状[3,3,2] 现在让我们计算
c
相对于
a
b_-tile
的梯度:

dc_da,dc_dbtile=tf.梯度(c,[a,b_tile])
#dc_da:与a形状相同的张量和所有元素1。
#dc_dbtile:与b和所有元素1形状相同的张量。
这完全有道理,因为我有一个线性关系:
c=a+b\u tile
。但是,当我计算
b_tile
w.r.t
b
的梯度时,我希望梯度是
1。
同样,因为我没有更改
b
的内部值,只需扩展维度即可。但当我这样做时,它会给出
2.
结果:

dbtile_db=tf.梯度(b_tile,[b])
#dbtile_db:与b形状相同且所有元素均等于2的张量。
我还尝试了两次连接张量
b
,而不是使用
tf.tile
,它给出了相同的结果,所以很明显我遗漏了一些东西

我尝试了另一个例子,以检查这是从哪里来的。现在让我们考虑另一张张量<代码> t>代码>,值与<代码> b>代码>完全相同,让我们连接它们来获得我需要的张量。在这种情况下:

#案例2:
m=tf.concat([b,t],-1)#形状[3,3,2]。与b_图相同的张量
dm_db,dm_dt=tf.梯度(m,[b,t])
#dm_db:与b形状相同且所有元素等于1的张量。
#dm_dt:与t形状相同且所有元素等于1的张量。
所以我有几个问题:

1) 我不明白的是,为什么使用
tf.tile
梯度会在所有副本中传播,而它们只是一个计算总和的工具。从数值上讲,这对我来说没有意义,我希望梯度像上一种情况一样传播

2) 案例1和案例2之间的差异(梯度方面)是什么?当我尝试做的是相同的时候,为什么会产生不同的结果

3) 考虑到我想计算和
c=a+b
,正确的方法是什么

问题是,在这个示例中,我的最后一个维度是
2
,因此我可以手动执行(串联)在我真正的问题中,我的最后一个维度是
256000
,因此我无法使用最后一种方法。先谢谢你