#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.]]