蓝阳 2017-12-19 17:17 采纳率: 50%
浏览 1881
已采纳

TensorFlow中的梯度下降函数的疑问

一段利用TensorFlow学习y=ax函数,其中a=10:

import tensorflow as tf
sess = tf.Session()

a = tf.Variable(tf.constant(0.))
x_val = 5.
x_data = tf.placeholder(dtype=tf.float32)
multiplication = tf.multiply(a, x_data)
loss = tf.square(tf.subtract(multiplication, 50.))
init = tf.global_variables_initializer()
sess.run(init)
my_opt = tf.train.GradientDescentOptimizer(0.01)
train_step = my_opt.minimize(loss)
print('Optimizing a Multiplication Gate Output to 50.')
for i in range(10):
    sess.run(train_step, feed_dict={x_data: x_val})
    a_val = sess.run(a)
    mult_output = sess.run(multiplication, feed_dict={x_data: x_val})
    print(str(a_val) + ' * ' + str(x_val) + ' = ' + str(mult_output))


打印的结果如下
Optimizing a Multiplication Gate Output to 50.
5.0 * 5.0 = 25.0
7.5 * 5.0 = 37.5
8.75 * 5.0 = 43.75
9.375 * 5.0 = 46.875
9.6875 * 5.0 = 48.4375
9.84375 * 5.0 = 49.2188
9.92188 * 5.0 = 49.6094
9.96094 * 5.0 = 49.8047
9.98047 * 5.0 = 49.9023
9.99023 * 5.0 = 49.9512

但是按照梯度下降函数,第一次计算出来的a_val应该是2.5才对:

a := a + alpha (y - a*x)x
= 0 + 0.01 ( 50 - 0 * 5) 5 = 2.5

但是从输出的结果看第一步完后a=5,感觉TensorFlow的梯度下降函数被改成了
a := a + 2 * alpha (y -a*x)x, 这样第二步a才会变成7.5

求解答

  • 写回答

2条回答 默认 最新

  • silent56_th 2017-12-23 15:11
    关注

    对平方差求导,指数项下来就是那个2

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 spring后端vue前端
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题