Skip to main content
 首页 » 编程设计

python之如何在 tensorflow 中更新张量内的子张量

2025年01月19日31zhoujg

我正在使用 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)

谢谢!

请您参考如下方法:

我建议创建一个 TensorFlow 常量,在您想要清零的位置使用零,在其他位置使用零。然后您可以创建一个操作,使用 tf.multiply 对常量和 dy_dx 进行逐元素乘法。根据图形的结构,您可能需要在下次调用 session.run 时将结果提供给 dy_dx;您可以用提要数据替换任何张量,包括变量和常量。

顺便说一下,如果你只想将 dropout 应用到输入层,你可以使用 tf.layers.dropout