Я думаю, вы могли бы использовать ConvLSTM2D
в Керасе для ваших целей. ImageDataGenerator
очень хорошо для CNN с изображениями, но может быть не удобно для CRNN с видео.
Вы уже преобразовали свои 300 видеоданных в одну и ту же форму (200, 256, 256, 3), каждое видео 200 кадров, каждый кадр 256x256 rgb. Затем вам нужно загрузить их в виде массива с нулевыми значениями (300, 200, 256, 256, 3). Для чтения видео в массивах numy см. этот ответ .
Затем вы можете передать данные в CRNN. Его первый ConvLSTM2D
слой должен иметь input_shape = (None, 200, 256, 256, 3)
.
Образец по вашим данным: (только иллюстрированный и не проверенный)
from keras.models import Sequential
from keras.layers import Dense
from keras.layers.convolutional_recurrent import ConvLSTM2D
model = Sequential()
model.add(ConvLSTM2D(filters = 32, kernel_size = (5, 5), input_shape = (None, 200, 256, 256, 3)))
### model.add(...more layers)
model.add(Dense(units = num_of_categories, # num of your vedio categories
kernel_initializer = 'Orthogonal', activation = 'softmax'))
model.compile(optimizer = 'adam', loss = 'categorical_crossentropy', metrics = ['accuracy'])
# then train it
model.fit(video_data, # shape (300, 200, 256, 256, 3)
[list of categories],
batch_size = 20,
epochs = 50,
validation_split = 0.1)
Надеюсь, это может быть немного полезно.