gpt4 book ai didi

python - Tensorflow 梯度返回 null

转载 作者:行者123 更新时间:2023-12-01 08:41:25 25 4
gpt4 key购买 nike

我正在尝试实现 Tensorflow tutorial on custom training 上给出的教程。由于某种原因 dW 和 DB 是 None 。我不明白为什么 t.gradient() 返回 None。

import tensorflow as tf
tf.enable_eager_execution()

class Model(object):
def __init__(self):
self.W = tf.Variable(5.0)
self.b = tf.Variable(0.0)
def __call__(self,x):
return self.W*x+self.b
def loss_function(self, y_true, y_predicted):
return tf.reduce_mean(tf.square(y_predicted-y_true))
def train(self, inputs, outputs, learning_rate):
with tf.GradientTape() as t:
current_loss = self.loss_function(inputs,outputs)
dW,db = t.gradient(current_loss,[self.W, self.b])
## dW and db returns None
self.W.assign_sub(learning_rate*dW)
self.b.assign_sub(learning_rate*db)

但是当 train 不是模型方法时,以下代码可以正常工作。有什么原因吗?

import tensorflow as tf
tf.enable_eager_execution()

class Model(object):
def __init__(self):
self.W = tf.Variable(5.0)
self.b = tf.Variable(0.0)
def __call__(self,x):
return self.W*x+self.b
def loss_function(self, y_true, y_predicted):
return tf.reduce_mean(tf.square(y_predicted-y_true))

def train(model, inputs, outputs, learning_rate):
with tf.GradientTape() as t:
current_loss = model.loss_function(model(inputs),outputs)
dW,db = t.gradient(current_loss,[model.W, model.b])
## dW and db returns None
model.W.assign_sub(learning_rate*dW)
model.b.assign_sub(learning_rate*db)

最佳答案

对于gradient为了工作,整个图表需要在 GradientTape 的范围内制作。 .

例如Tensorflow tutorial on custom training中提供的代码:

with tf.GradientTape() as t:
current_loss = model.loss_function(model(inputs),outputs)

图表中 current_loss连接到模型变量( model.Wmodel.B )在 t 范围内构造.

如果您将教程提供的代码更改如下:

logits = model(inputs)
with tf.GradientTape() as t:
current_loss = model.loss_function(logits, outputs)

您将得到None对于 dWdb .

关于python - Tensorflow 梯度返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53473264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com