На мой взгляд, сообщение об ошибке на самом деле довольно точное. Но я понимаю ваше замешательство. Вы, наверное, не очень понимаете, как работает Tensorflow под капотом. Возможно, вы захотите начать читать здесь .
Форма вычислительного графа должна быть известна до выполнения. В каждой переменной или заполнителе может быть только одна ось, которая не указана во время компиляции, а во время выполнения она считается размерностью пакета.
В вашем случае вы пытаетесь использовать заполнители для указания размеров переменной, что невозможно, поскольку график не может быть скомпилирован таким образом.
Я не знаю, что вы пытаетесь сделать с этим, но я думаю, есть способ достичь того, что вам нужно. На самом деле вы можете динамически использовать длину размерности пакета, чтобы нарисовать равномерный вектор этого размера.
Редактировать : После того, как вы обновили вопрос, я чувствую, что был прав в отношении моего подозрения. Нет необходимости в a
и b
в качестве заполнителей, просто сделайте их переменными Python, например:
import tensorflow as tf
# Matrix shape must be known in advance, but can of course still be specified
# in some settings file or at the beginning of the python skript
A = 2
B = 2
W = tf.Variable(tf.sign(tf.random_uniform(shape=(A, B), minval=-1.0,
maxval=1.0)))
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(W))