Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TensorFlow 2.0中的基本函数最小化和变量跟踪_Python_Tensorflow_Tensorflow2.0 - Fatal编程技术网

Python TensorFlow 2.0中的基本函数最小化和变量跟踪

Python TensorFlow 2.0中的基本函数最小化和变量跟踪,python,tensorflow,tensorflow2.0,Python,Tensorflow,Tensorflow2.0,我正试图在TensorFlow 2.0中尽可能地实现最基本的函数最小化,正如问题中所述,但我无法使其中描述的解决方案起作用。这是我的尝试,主要是复制粘贴,但添加了一些似乎丢失的部分 import tensorflow as tf x = tf.Variable(2, name='x', trainable=True, dtype=tf.float32) with tf.GradientTape() as t: y = tf.math.square(x) # Is the tape t

我正试图在TensorFlow 2.0中尽可能地实现最基本的函数最小化,正如问题中所述,但我无法使其中描述的解决方案起作用。这是我的尝试,主要是复制粘贴,但添加了一些似乎丢失的部分

import tensorflow as tf

x = tf.Variable(2, name='x', trainable=True, dtype=tf.float32)
with tf.GradientTape() as t:
    y = tf.math.square(x)

# Is the tape that computes the gradients!
trainable_variables = [x]

#### Option 2
# To use minimize you have to define your loss computation as a funcction
def compute_loss():
    y = tf.math.square(x)
    return y

opt = tf.optimizers.Adam(learning_rate=0.001)
train = opt.minimize(compute_loss, var_list=trainable_variables)

print("x:", x)
print("y:", y)
输出:

x: <tf.Variable 'x:0' shape=() dtype=float32, numpy=1.999>
y: tf.Tensor(4.0, shape=(), dtype=float32)
x:
y:tf.Tensor(4.0,shape=(),dtype=float32)
所以它说最小值是
x=1.999
,但显然这是错误的。发生了什么事?我想它只执行了一个最小化器循环还是什么?如果是这样的话,“最小化”对函数来说似乎是一个可怕的名字。这是怎么回事


另一方面,我还需要知道在损失函数中计算的中间变量的值(示例中只有
y
,但假设计算
y
需要几个步骤,我需要所有这些数字)。我也不认为我正确地使用了梯度带,我不清楚它与损失函数中的计算有什么关系(我只是从另一个问题中复制了这个东西)。

你需要多次调用
最小化
,因为
minimize
只执行优化的一个步骤

以下几点应该行得通

将tensorflow导入为tf
x=tf.Variable(2,name='x',trainable=True,dtype=tf.float32)
#是计算梯度的磁带!
可训练的_变量=[x]
#要使用最小化,必须将损失计算定义为一个函数
类模型():
定义初始化(自):
self.y=0
def计算损耗(自身):
self.y=tf.math.square(x)
回归自我
opt=tf.optimizers.Adam(学习率=0.01)
模型=模型()
对于范围(1000)内的i:
训练=选择最小化(model.compute\u损失,var\u列表=可训练变量)
打印(“x:,x)
打印(“y:,model.y”)

好的,如果我提高学习率,我可以让它起作用,但随后我会得到“NameError:name'y'未定义”。更改我的代码以反映我没有显式存储
y
。现在它应该可以工作了。好的,它适用于这个确切的情况,但一般来说,我实际上需要在损失函数中计算的东西的值,而不仅仅是最终的结果。如何存储这些值?您可以使用全局变量存储值,或者我更愿意将loss函数封装在一个类中,然后您可以使用自引用访问属性。