python - 如何通过更新变量来更改张量的输出?
问题描述
我有一个依赖于某个变量的损失函数,然后我想更改该变量并获得更新的损失。损失是作为函数的输入给我的,所以我不能简单地将那条线移动到 tf.control_dependencies下(这确实给了我想要的东西)。那么之后我该如何更新变量和损失呢?
X = tf.Variable(1.0) #Dummy parameters of a neural network
loss = (X+1.0)**2 #Dummy Loss function given to me as input
add = tf.assign(X,X+1.0) #Me changing the parameters of the network
with tf.control_dependencies( [ add ] ):
updated_loss = loss #Me wanting the updated loss
print(K.eval(updated_loss )) #Me not getting the updated loss :(
解决方案
当您创建损失变量时,您正在给它一个初始值,这不会使它成为一个每次调用时都会重新评估损失的函数。
我们可以制作一个损失函数,每次调用它来计算损失
编辑:我更改了下面的代码以将值重新分配给损失张量流变量,而不是返回一个新变量。
import tensorflow as tf
import tensorflow.keras.backend as K
# Function that updates the loss
@tf.function
def update_loss(X, loss):
loss.assign((X+1.0)**2)
def test():
# Initialise a value of loss
loss = tf.Variable(0.0)
print(K.eval(loss))
# Initialise variable
X = tf.Variable(2.0)
# Update loss
update_loss(X, loss)
print(K.eval(loss))
# Change network by adding 1.0
X.assign_add(1.0)
# Update loss
update_loss(X, loss)
print(K.eval(loss))
推荐阅读
- tooltip - 在 Tableau 中,是否可以自定义链接的工具提示?
- mysql - MySQL - 每年从 UNION 计算 SUM(field)
- amazon-web-services - AWS Cognito 中的 Microsoft oidc 允许多个租户
- powershell - 另存为 .txt 文件 CMD/powershell 输出
- php - 后端中的 TYPO3 TCA 字段顺序
- javascript - 如何用另一个数组值替换javascript中的数组值?
- azure - Azure 托管应用程序 - 带有应用程序链接的 ViewDefinition.json 操作
- javascript - 单击按钮时如何将所有其他布尔值切换为false
- mysql - 检查值是否存在于另一个(连接的)表中并相应地在结果中填写列
- linux - for 循环在 bash 中创建的整数比预期的要多