Для чего используется метод queue.dequeue_up_to () в tenorflow.data_flow_ops?

1

Я действительно был очень смущен этим методом, особенно когда я нашел это загадочное выражение:

output.set_shape(tensor_shape.TensorShape([None]).concatenate(shape))

Вот некоторые комментарии в качестве описания метода:

This operation concatenates queue-element component tensors along
the 0th dimension to make a single component tensor. If the queue
has not been closed, all of the components in the dequeued tuple
will have size 'n' in the 0th dimension.

Так странно указывать None для 0-го измерения формы (я полагаю, это может быть n?), Что, кажется, противоречит размеру "n" в описании. Это вызвало ошибку Shape в моей программе, и я не могу просто понять причину, хотя я нашел, где она находится.

Не могли бы вы рассказать мне, почему использовать TensorShape([None]) здесь?

Теги:
tensorflow
machine-learning
deep-learning
computer-vision

1 ответ

0
Лучший ответ

Метод QueueBase.dequeue_up_to(n) возвращает партию не более ("до") n элементов из очереди. В отличие от QueueBase.dequeue_many(n) метод QueueBase.dequeue_many(n) возвращает партию из ровно n элементов из очереди.

Эти две операции ведут себя одинаково до тех пор, пока очередь не будет закрыта. После этой точки в очередь не может быть добавлено больше элементов, поэтому эти операции будут истощать оставшиеся элементы. Если количество оставшихся элементов (num_remaining) не является точным кратным n, QueueBase.dequeue_up_to(n) вернет окончательную меньшую партию из num_remaining % n элементов. Напротив, QueueBase.dequeue_many(n) не вернет те последние несколько элементов, потому что он не может сделать партию ровно n элементов.

Поскольку QueueBase.dequeue_up_to(n) может возвращать партии разных размеров (т.е. n и num_remaining % n), которые не являются статически известными (поскольку num_remaining зависит от количества операций очереди, которые происходят во время выполнения), первые измерения его возврата значениями являются Dimension(None). Dimension(None) обычно используется для обозначения формы, которая может варьироваться в зависимости от исполнения.

  • 0
    Я думаю, что у меня есть это и большое спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню