Создать Итератор набора данных с изменением размеров? - PullRequest
0 голосов
/ 06 июня 2019

Я создаю итератор набора данных в тензорном потоке, например, так:

iterator = tf.data.Iterator.from_structure(training_dataset.output_types, training_dataset.output_shapes)

training_dataset.output_shapes равен

[TensorShape([Dimension(None), Dimension(48), Dimension(48), Dimension(3)])]

Первое измерение - none, поскольку сеть (EDSR) предназначена дляпринимать исправления изображения фиксированного размера.Входные изображения разного размера станут различным количеством образцов - шаг, который происходит во время предварительной обработки в соответствии с API набора данных.Формы, которые входят и выходят:

(?, ?, 3) -> (?, 48, 48, 3)

Код итератора выполняется, как ожидается, если он вызывается только один раз (как в модульном тесте).Однако, если он вызывается дважды, он возвращает ошибку примерно так:

tensorflow.python.framework.errors_impl.InvalidArgumentError: Input to reshape is a tensor with 870912 values, but the requested shape has 1354752
     [[{{node create_image_swatches/Reshape}}]]
     [[{{node create_iterator/IteratorGetNext}}]]

Я написал код, очень похожий на этот, ранее.Итераторы набора данных будут работать несколько раз с одним и тем же синтаксисом и структурой, но с фиксированным первым измерением и переменными другими измерениями, такими как

[TensorShape([Dimension(1), Dimension(None), Dimension(None), Dimension(3)])]

. Существует ли причина, по которой первое измерение не может иметь переменный размер для итераторов набора данных?

...