Как ввести последовательность изображений в сеть LSTM для классификации видео - PullRequest
0 голосов
/ 10 июня 2019

Я использую LSTM для классификации видео. Я использую библиотеку Python Keras для создания сети LSTM Long Term Short Memory. Я понимаю, что LSTM принимает форму ввода данных (выборка, отметка времени, характеристики). У меня есть три класса видео, и каждый из этих классов имеет 10 видеофайлов. Это значит, что у меня 10 * 3 = 30 образцов. Я создал последовательность кадров для каждого из этих видеофайлов. Каждая из этих последовательностей состоит из 32 кадров видеофайлов. Я использую обученную модель для извлечения элементов, поэтому я подаю каждый из этих кадров в предварительно обученную модель VGG16, которая генерирует 512 элементов для одного кадра. поэтому один видеофайл должен иметь массив (32 512) измерений. Затем я добавляю каждый из этих массивов в один массив для всех 30 сэмплов и сохраняю его в виде массива. окончательный размер массива равен (960 512). Теперь моя проблема заключается в том, как мне изменить форму этого массива в (sample, timestamp, features) = (20,32,512). Вот фрагмент кода, который я использовал: Обратите внимание, что x_generator имеет 640,512, и я хочу преобразовать его в (30,32,512). Буду признателен за решение моей проблемы.

 x_generator=None
 if x_generator is None:
    imgx = image.img_to_array(img)
    imgx = np.expand_dims(imgx, axis=0)
    imgx = preprocess_input(imgx)
    x_generator = base_model.predict(imgx)
 else
    imgx = image.img_to_array(img)
    imgx = np.expand_dims(imgx, axis=0)
    imgx = preprocess_input(imgx)
    x_generator = np.append(x_generator,base_model.predict(imgx),axis=0)

1 Ответ

1 голос
/ 10 июня 2019

Если вы получили 960 значений, добавив 30 выборок измерения (32, 512), вы можете просто использовать np.reshape , чтобы изменить массив с ожидаемыми размерами.

x_generator = np.reshape(x_generator, [30, 32, 512])
...