Я создаю итератор набора данных в тензорном потоке, например, так:
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)])]
. Существует ли причина, по которой первое измерение не может иметь переменный размер для итераторов набора данных?