最小化Tensorflow中一个变量的功能

发布于 2021-01-29 17:34:33

我是Tensorflow的新手,我想知道是否可以使用Tensorflow最小化一个变量的函数。

例如,我们可以使用Tensorflow通过初始猜测(例如x = 1)最小化2 * x ^ 2-5 ^ x + 4吗?

我正在尝试以下方法:

import tensorflow as tf
import numpy as np

X = tf.placeholder(tf.float32, shape = ())
xvar = tf.Variable(np.random.randn())    
f = 2*mul(X,X) - 5*X + 4

opt = tf.train.GradientDescentOptimizer(0.5).minimize(f)

with tf.Session() as sess:
    tf.global_variables_initializer().run()
    y = sess.run(opt, feed_dict = {X : 5.0}) #initial guess = 5.0
    print(y)

但这会产生以下错误:

ValueError: No gradients provided for any variable, check your graph for ops that do not support gradients, between variables

请帮助我了解我在这里做错了什么。

关注者
0
被浏览
46
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    如果要最小化单个参数,则可以执行以下操作(由于要尝试训练参数,因此我避免使用占位符-占位符通常用于超参数和输入,不被视为可训练参数):

    import tensorflow as tf
    
    x = tf.Variable(10.0, trainable=True)
    f_x = 2 * x* x - 5 *x + 4
    
    loss = f_x
    opt = tf.train.GradientDescentOptimizer(0.1).minimize(f_x)
    
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        for i in range(100):
            print(sess.run([x,loss]))
            sess.run(opt)
    

    这将输出以下对(x,损耗)对的列表:

    [10.0, 154.0]
    [6.5, 56.0]
    [4.4000001, 20.720001]
    [3.1400001, 8.0192013]
    [2.3840001, 3.4469128]
    [1.9304, 1.8008881]
    [1.65824, 1.2083197]
    [1.494944, 0.99499512]
    [1.3969663, 0.91819811]
    [1.3381798, 0.89055157]
    [1.3029079, 0.88059855]
    [1.2817447, 0.87701511]
    [1.2690468, 0.87572551]
    [1.2614281, 0.87526155]
    [1.2568569, 0.87509394]
    [1.2541142, 0.87503386]
    [1.2524685, 0.87501216]
    [1.2514811, 0.87500429]
    [1.2508886, 0.87500143]
    [1.2505331, 0.87500048]
    [1.2503198, 0.875]
    [1.2501919, 0.87500024]
    [1.2501152, 0.87499976]
    [1.2500691, 0.875]
    [1.2500415, 0.875]
    [1.2500249, 0.87500024]
    [1.2500149, 0.87500024]
    [1.2500089, 0.875]
    [1.2500054, 0.87500024]
    [1.2500032, 0.875]
    [1.2500019, 0.875]
    [1.2500012, 0.87500024]
    [1.2500007, 0.87499976]
    [1.2500005, 0.875]
    [1.2500002, 0.87500024]
    [1.2500001, 0.87500024]
    [1.2500001, 0.87500024]
    [1.2500001, 0.87500024]
    [1.2500001, 0.87500024]
    [1.2500001, 0.87500024]
    [1.2500001, 0.87500024]
    [1.2500001, 0.87500024]
    [1.2500001, 0.87500024]
    [1.2500001, 0.87500024]
    [1.2500001, 0.87500024]
    [1.2500001, 0.87500024]
    [1.2500001, 0.87500024]
    [1.2500001, 0.87500024]
    [1.2500001, 0.87500024]
    [1.2500001, 0.87500024]
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看