Массив полиномов Tensorflow

#python #tensorflow

#python #tensorflow

Вопрос:

Я пытаюсь оценить aX^2 bX c , как [a,b,c]*[X*X X 1] в tensorflow.

Я попробовал следующий код:

 import tensorflow as tf
X = tf.placeholder(tf.float32, name="X")
W = tf.Variable([1,2,1], dtype=tf.float32, name="weights")
W=tf.reshape(W,[1,3])
F = tf.Variable([X*X,X,1.0], dtype=tf.float32, name="Filter")
F=tf.reshape(F,[3,1])
print(W.shape)
print(F.shape)
Y=tf.matmul(W,F)
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for i in range(10): 
        sess.run(Y, feed_dict={X: i})
    Y=sess.run(Y)
print("Y:",Y)
  

Однако инициализатор не доволен:

 (1, 3)
(3, 1)
...
tensorflow.python.framework.errors_impl.InvalidArgumentError: You must feed a value for placeholder tensor 'X' with dtype float
     [[{{node X}}]]
During handling of the above exception, another exception occurred:
...
Caused by op 'X', defined at:
  File "sample.py", line 2, in <module>
    X = tf.placeholder(tf.float32, name="X")  
...
  

Есть мысли относительно возможных альтернатив?

Комментарии:

1. Вы читали свои ответы?

Ответ №1:

Вам просто нужно немного изменить код. Значение tf.Variable не должно быть tf.placeholder , иначе это вызовет ошибку инициализации при запуске sess.run(tf.global_variables_initializer()) . Вы можете использовать tf.stack вместо него. Кроме того, пожалуйста, не забывайте передавать данные при запуске sess.run(Y) .

 import tensorflow as tf

X = tf.placeholder(tf.float32, name="X")
W = tf.Variable([1,2,1], dtype=tf.float32, name="weights")
W = tf.reshape(W,[1,3])
F = tf.stack([X*X,X,1.0])
F = tf.reshape(F,[3,1])
Y = tf.matmul(W,F)
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for i in range(10):
        Y_val = sess.run(Y, feed_dict={X: i})
        print("Y:",Y_val)

Y: [[1.]]
Y: [[4.]]
Y: [[9.]]
Y: [[16.]]
Y: [[25.]]
Y: [[36.]]
Y: [[49.]]
Y: [[64.]]
Y: [[81.]]
Y: [[100.]]
  

Ответ №2:

Я думаю, что даже если вы все еще можете инициализировать переменную, которая зависит от заполнителя, подобного этому, W она будет инициализироваться повторно, если вы не добавите больше кода для инициализации только неинициализированных переменных. Это требует больше усилий.

Надеюсь, я не пропустил другие недостатки этого подхода.

 import tensorflow as tf

sess = tf.InteractiveSession()

X = tf.placeholder(tf.float32, name="X")

W = tf.Variable([1, 2, 1], dtype=tf.float32, name="weights")
W = tf.reshape(W, [1, 3])

var = tf.reshape([X*X,X,1],[3,1])
F = tf.get_variable('F', dtype=tf.float32, initializer=var)

init = tf.global_variables_initializer()
Y=tf.matmul(W,F)

for i in range(10):
    sess.run([init], feed_dict={X: i})
    print(sess.run(Y))


[[1.]]
[[4.]]
[[9.]]
[[16.]]
[[25.]]
[[36.]]
[[49.]]
[[64.]]
[[81.]]
[[100.]]