我和MNIST一起工作,我有一个大小为[?,28,28,1]的渐变张量,我想把一些[28,28,1]子张量归零它,我该怎么做到这一点?
我知道我需要将子张量归零的索引(作为列表)。我尝试过这样的事情(如下所示),但scatter.update只能改变变量而不是张量。我也尝试堆叠所需的零和零的张量,但不能建立所需的结果。
dy_dx, = tf.gradients(loss, x_adv)
zeroes = tf.zeros(dy_dx[0].get_shape(), tf.float32)
dy_dx = tf.scatter_update(dy_dx, indices, zeroes)
谢谢!
答案 0 :(得分:1)
我建议在你想要归零的位置和其他地方创建一个TensorFlow常量。然后,您可以创建一个使用tf.multiply
进行常量和dy_dx
的元素乘法的运算。根据图表的结构,您可能需要在下次调用dy_dx
时将结果提供给session.run
;您可以使用Feed数据替换任何Tensor,包括变量和常量。
顺便提一下,如果您只想将dropout应用于输入图层,可以使用tf.layers.dropout