Как мне преобразовать кадры набора данных поезда в 5d тензор, сохраняя метку измерения кадров?

#python #tensorflow #deep-learning

#python #тензорный поток #глубокое обучение

Вопрос:

Я использовал image_dataset_from_directory () для создания данных моего поезда (529003 кадра), проверки (29388 кадров) и тестирования (28875 кадров):

 
train_dataset = image_dataset_from_directory(
    directory=TRAIN_DIR,
    labels="inferred",
    label_mode="categorical",
    class_names=["0", "10", "5"],
    batch_size=32,
    image_size=SIZE,
    seed=SEED,
    subset=None,
    interpolation="bilinear",
    follow_links=False,
)

#Shape of the data
(TensorSpec(shape=(None, 224, 224, 3), dtype=tf.float32, name=None),
 TensorSpec(shape=(None, 3), dtype=tf.float32, name=None))
  

Модель, которую я использую, ожидает данные в виде 5D тензора (32,5,224,224,3)
Я использую transfer learning с MobileNet, а затем LSTM для классификации видео.

Я пытался использовать :

 train_dataset = train_dataset.batch(5).batch(32)
  

Но набор данных становится 6D, а размерность меток также увеличивается

 (TensorSpec(shape=(None, None, None, 224, 224, 3), dtype=tf.float32, name=None),
 TensorSpec(shape=(None, None, None, 3), dtype=tf.float32, name=None))
  

Ответ №1:

Я нашел решение, которое мне нужно для создания пользовательского генератора, который генерирует 5D тензоры из видеовхода, который рассматривает длину последовательности как 5-й элемент 5D тензора. Тот, который я использую из Keras, image_dataset_from_directory(), создает 4D тензор.