2017-01-29 35 views
5

Tôi mới dùng Tensorflow và tự hỏi liệu có thể giảm thiểu một hàm của một biến sử dụng Tensorflow hay không.Giảm thiểu chức năng của một biến trong Tensorflow

Ví dụ: chúng tôi có thể sử dụng Tensorflow để giảm thiểu 2 * x^2 - 5^x + 4 bằng cách sử dụng đoán ban đầu (giả sử x = 1) không?

tôi đang cố gắng như sau:

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) 

Nhưng điều này mang đến cho các lỗi sau:

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

Xin hãy giúp tôi hiểu những gì tôi làm sai ở đây.

Trả lời

11

Nếu bạn muốn giảm thiểu một tham số, bạn có thể thực hiện các thao tác sau (tôi đã tránh sử dụng trình giữ chỗ vì bạn đang cố đào tạo tham số - trình giữ chỗ thường được sử dụng cho siêu tham số và đầu vào và không được xem là có thể đào tạo thông số):

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) 

chí này ra danh sách sau đây của các cặp (x, lỗ):

[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

đó là tốt đẹp, chỉ để nhận ra rằng hàm tổn thất là chức năng tối ưu hóa riêng của mình. –

Các vấn đề liên quan