Tensorflow GradientDescentOptimizer.minimize()如何工作?
关于TensorFlow,我对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,
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")]