首页 > 解决方案 > 变量值不支持问题,python

问题描述

嗨,有人可以帮忙解决这个 += 问题吗?

loss += total_variation_weight * total_variation_loss(combination_image)

错误

RuntimeError: Variable += value not supported. Use variable.assign_add(value) to modify the variable value and variable = variable + value to get a new Tensor object. 

你如何+=用一个assign_add()电话代替?

标签: pythontensorflow

解决方案


这行得通吗?

loss.assign_add(total_variation_weight * total_variation_loss(combination_image))

问题是这loss是一个张量对象,而不是一个常规的数字 Python 变量。一些适用于常规数值变量的东西不适用于张量。

在这种情况下,它归结为价值与身份。对于数字,价值就是身份。也就是说,如果你先赋值x = 1,然后再做x += 1,意图就很明确了,不用担心你以某种方式将数字 1 转换为全局数字 2。您刚刚更改了x“包含”的数字。

对于对象,您可以选择。您是修改现有的 Tensor 对象以使其具有新值,还是从新值中创建一个新的 Tensor 对象?纯函数式设计需要后者,但 Python 允许前者;您应该选择哪一个取决于您正在解决的问题的其他方面。

所以就像消息说的那样:如果你想保持相同的 Tensor 对象但改变它所代表的值,使用.assign_add方法。如果你想创建一个新的张量对象,请改用这个:

loss = loss + total_variation_weight * total_variation_loss(combination_image)

推荐阅读