Размер заполнителя TensorFlow

#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. Обычное соглашение заключается в том, чтобы сначала указать размер пакета