Размер заполнителя TensorFlow - PullRequest
0 голосов
/ 12 апреля 2019

Я запутался в том, как использовать заполнитель для пакетного обучения.В моем коде входное изображение имеет размер 3 x 3. Чтобы выполнить пакетное обучение, я устанавливаю tf.placeholder(tf.float32,shape=[None,3,3]).

Когда я пытаюсь дать партии 3х3 в качестве входа, TensorFlow выдает ошибку, которая

Cannot feed value of shape (3, 3) for Tensor u'Placeholder_1:0', which has shape '(?, 3, 3).

Ниже приведен код

input = np.array([[1,1,1],[1,1,1],[1,1,1]])
placeholder = tf.placeholder(tf.float32,shape=[None,3,3])
init = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    sess.run(placeholder, feed_dict{placeholder:input})

1 Ответ

0 голосов
/ 12 апреля 2019

Ваш заполнитель имеет форму None x 3 x 3, поэтому вам нужно ввести данные, которые имеют размеры 3 , даже если первое измерение имеет только размер 1 (т. Е. 1 x 3 x 3 в вашем случае вместо 3 x 3). Один простой способ добавить дополнительное измерение (размером 1) в массив - это сделать array[None]. Если array имеет форму 3 x 3, то array[None] имеет форму 1 x 3 x 3. Таким образом, вы можете обновить свой код до

inputs = np.array([[1, 1 ,1], [1, 1, 1], [1, 1, 1]])
placeholder = tf.placeholder(tf.float32,shape=[None, 3, 3])
init = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    sess.run(placeholder, feed_dict{placeholder: inputs[None]})

(я изменил input на inputs, потому что input - это ключевое слово в Python и не должно использоваться в качестве имени переменной)

Обратите внимание, что вы не захотите делать inputs[None], если inputs уже 3D. Если это может быть 2D или 3D, вам понадобится условие типа inputs[None] if inputs.ndim == 2 else inputs.

...