Я пытаюсь изучить TensorFlow, внедряя ApproximatelyAlexNet на основе различных примеров в Интернете. В основном расширяя пример AlexNet here, чтобы получить 224x224 RGB-изображения (а не 28x28 изображений в оттенках серого) и добавили еще несколько слоев, изменив размеры ядра, шаги и т. Д. На другие реализованные в AlexNet реализации, которые я нашел в Интернете.Ошибка TensorFlow: логины и метки должны быть одинакового размера
Работали через ряд несогласованных ошибок типа формы, но это один имеет меня в тупик:
tensorflow.python.framework.errors.InvalidArgumentError: logits and labels must be same size: logits_size=dim { size: 49 } dim { size: 10 } labels_size=dim { size: 1 } dim { size: 10 }
[[Node: SoftmaxCrossEntropyWithLogits = SoftmaxCrossEntropyWithLogits[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/gpu:0"](Softmax, _recv_Placeholder_1_0/_13)]]
[[Node: gradients/Mean_grad/range_1/_17 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/cpu:0", send_device="/job:localhost/replica:0/task:0/gpu:0", send_device_incarnation=1, tensor_name="edge_457_gradients/Mean_grad/range_1", tensor_type=DT_INT32, _device="/job:localhost/replica:0/task:0/cpu:0"]()]]
49 размер особенно озадачивает. Для отладки, мой размер партии в настоящее время 1, если увеличить его до 2, то 49 будет 98.
Если я вхожу в форму х и у, что я прохожу в
sess.run(optimizer, feed_dict={x: batchImages, y: batchLabels, keepProb: P_DROPOUT})
я получаю
x shape: (1, 150528)
y shape: (1, 10)
Это как ожидалось: 150528 = 224 * 224 RGB пикселей и один горячий вектор, представляющий мои метки.
Поблагодарили бы за помощь в определении этого!
Update: код экспонирование ошибки здесь:
https://gist.github.com/j4m3z0r/e70096d0f7bd4bd24c42
Удивительный. Благодарю. Я думаю, что смогу с этим справиться. Очень признателен. – j4m3z0r
Последующий вопрос: существует ли способ получить TensorFlow в более информативном режиме в этом случае? Похоже, что TF мог понять, что были несогласованные фигуры точно на той линии, которую вы отметили. – j4m3z0r
Я думаю, что проблема заключается в -1 в изменении, которая действует как подстановочный знак и (в этом случае) теряет информацию о ведущем измерении. Это затрудняет понимание TensorFlow истинной формы без запуска программы, и могут быть даже допустимые программы, в которых вы разбиваете один пример на 49 меньших примеров. Вероятно, нам нужны более эффективные способы выражения инвариантных преобразований размера партии, чтобы избежать этого ('tf.expand_dims()' и 'tf.squeeze()' полезны, но, возможно, нам нужен 'tf.flatten_dims()' для этого случая). – mrry