Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.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
Tensorflow GradientDescentOptimizer.minimize()如何工作?_Tensorflow_Training Data_Gradient Descent - Fatal编程技术网

Tensorflow GradientDescentOptimizer.minimize()如何工作?

Tensorflow GradientDescentOptimizer.minimize()如何工作?,tensorflow,training-data,gradient-descent,Tensorflow,Training Data,Gradient Descent,关于TensorFlow,我对GradientDescentOptimizer.minimize()的实际工作原理感到困惑。更具体地说,通过下面的代码,调用如何最小化(错误)修改m,b,以便在我调用sess.run([m,b])时,它们返回修改后的m,b值?我认为很难找到minimize()和变量m和b之间的任何联系,就像下面代码末尾的结果一样: #Actaul Data x_data = np.linspace(0, 10, 10) + np.random.uniform(-1.5, 1.5,

关于TensorFlow,我对
GradientDescentOptimizer.minimize()
的实际工作原理感到困惑。更具体地说,通过下面的代码,调用
如何最小化(错误)
修改
m
b
,以便在我调用
sess.run([m,b])
时,它们返回修改后的
m
b
值?我认为很难找到
minimize()
和变量
m
b
之间的任何联系,就像下面代码末尾的结果一样:

#Actaul Data
x_data = np.linspace(0, 10, 10) + np.random.uniform(-1.5, 1.5, 10)
y_label = np.linspace(0, 10, 10) + np.random.uniform(-1.5, 1.5, 10)

#Random Variables --> These variables will be be modified by minimize()
m = tf.Variable(0.44)
b = tf.Variable(0.87)

error = 0

for x, y in zip(x_data, y_label):
    error += (y - (m*x + b)) ** 2

optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.001)
train = optimizer.minimize(error)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    training_steps = 100

    for i in range(training_steps):
        sess.run(train)

    final_slope, final_intercept = sess.run([m, b])

    print(final_slope, final_intercept) # 0.7535087, 0.83729243

优化器与可训练变量(如m和b)之间的联系如下

可训练变量

您可以将此参数设置为False以从训练中排除任何变量。在您的代码中,默认情况下,trainable为True。如果trainable不是False,它将拾取任何其他变量并尝试对其进行优化

本例中的输出是

0.44 2.134535

显式传递var_列表

可以使用代码收集所有可训练变量

variables = tf.trainable_variables()
allvariables = [var for var in variables]

optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.001)
train = optimizer.minimize(error,var_list=variables)
所以,如果不是mx+b,而是其他表达式,我们可以根据需要进行优化

可能还有其他先进的方法来控制这种情况

with tf.variable_scope('discriminator'):
    c = tf.Variable(1.0)

variables = tf.trainable_variables()
allvariables = [var for var in variables if var.name.startswith("discriminator")]

这只包括c.

您熟悉机器学习吗?你使用变量
b
m
来计算你的错误,当你试图最小化你的错误时,它们的值改变似乎是合乎逻辑的。很遗憾,我不熟悉机器学习。然而,我有点想知道minimize()函数是如何知道m和b是固定的并将其固定的?如果不是mx+b而是其他表达式呢?
with tf.variable_scope('discriminator'):
    c = tf.Variable(1.0)

variables = tf.trainable_variables()
allvariables = [var for var in variables if var.name.startswith("discriminator")]