#tensorflow #input #batchsize
#tensorflow #ввод #размер пакета
Вопрос:
Я запутался в том, как использовать заполнитель для пакетного обучения. В моем коде входное изображение имеет размер 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:
Ваш заполнитель имеет форму None x 3 x 3
, поэтому вам нужно вводить данные, которые имеют 3 измерения, даже если первое измерение имеет размер 1 (т. Е. a 1 x 3 x 3
в вашем случае вместо a 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
.
Комментарии:
1. разве заполнителем не должен быть tf.placeholder(tf.float32,shape= [3,3, None]), поскольку пакетное обучение увеличит размер ввода в 3-м измерении, например, первый ввод будет 3 x 3 x 1, второй пакетный ввод сделает ввод как 3 x 3 x 2. Почему нав первую очередь это tf.placeholder(tf.float32,shape=[None, 3, 3]). Это показывает, что 3-е измерение фиксировано на 3. Любое объяснение этому?
2. Обычное соглашение заключается в том, чтобы сначала указать размер пакета