Minimize a function of one variable in Tensorflow

前端 未结 2 339
没有蜡笔的小新
没有蜡笔的小新 2020-12-10 04:57

I am new to Tensorflow and was wondering whether it would be possible to minimize a function of one variable using Tensorflow.

For example, can we use Tensorflow to

相关标签:
2条回答
  • 2020-12-10 05:35

    If you want to minimize a single parameter you could do the following (I've avoided using a placeholder since you are trying to train a parameter - placeholders are often used for hyper-parameters and input and aren't considered trainable parameters):

    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)
    

    This will output the following list of pairs (x,loss):

    [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]
    
    0 讨论(0)
  • 2020-12-10 05:35

    Here is the same solution with the same output using tensorflow 2.0

    import tensorflow as tf
    from tensorflow.python.training import gradient_descent
    
    x = tf.Variable(10.0, trainable=True)
    
    
    @tf.function
    def f_x():
        return 2 * x * x - 5 * x + 4
    
    
    for _ in range(100):
        print([x.numpy(), f_x().numpy()])
        opt = gradient_descent.GradientDescentOptimizer(0.1).minimize(f_x)
    
    0 讨论(0)
提交回复
热议问题