Я настраиваю конвейер данных изображения на Tensorflow 2.1. Я использую набор данных с изображениями RGB переменных форм (h, w, 3) и не могу найти способ заставить его работать. Я получаю следующую ошибку при вызове tf.data.Dataset.batch()
:
tensorflow.python.framework.errors_impl.InvalidArgumentError: Cannot batch tensors with different shapes in component 0. First element had shape [256,384,3] and element 3 had shape [160,240,3]
Я нашел метод padded_batch
, но я не хочу, чтобы мои изображения были дополнены до той же формы.
РЕДАКТИРОВАТЬ:
Я думаю, что я нашел небольшой обходной путь с помощью функции tf.data.experimental.dense_to_ragged_batch
(которая преобразовывает представление плотного тензора в рваный).
В отличие от tf.data.Dataset.batch
, входные элементы для пакетирования могут иметь разные формы, и каждая партия будет кодироваться как tf.RaggedTensor
Но тогда у меня есть другой проблема. Мой набор данных содержит изображения и соответствующие им ярлыки. Когда я использую функцию следующим образом:
ds = ds.map(
lambda x: tf.data.experimental.dense_to_ragged_batch(batch_size)
)
я получаю следующую ошибку, потому что она пытается сопоставить функцию со всем набором данных (таким образом, с изображениями и метками), что невозможно, потому что это может быть только применяется к одному единственному тензору (не к 2).
TypeError: <lambda>() takes 1 positional argument but 2 were given
Есть ли способ указать, к какому элементу из двух я хочу применить преобразование?