Пожалуйста, смотрите следующий код для создания сети LSTM:
NumberofClasses=8
model = Sequential()
model.add(LSTM(256,dropout=0.2,input_shape=(32,
512),return_sequences=False))
model.add(Dense(1024, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(NumberofClasses, activation='softmax'))
print(model.summary())
sgd = SGD(lr=0.00005, decay = 1e-6, momentum=0.9, nesterov=True)
model.compile(optimizer=sgd, loss='categorical_crossentropy', metrics=
['accuracy'])
callbacks = [EarlyStopping(monitor='val_loss', patience=10, verbose=1),
ModelCheckpoint('video_1_LSTM_1_1024.h5', monitor='val_loss',
save_best_only=True, verbose=1 ) ]
nb_epoch = 500
model.fit(train_data,train_labels,validation_data,validation_labels,batch_size,nb_epoch,callbacks,shuffle=False,verbose=1)
В приведенном выше коде я создаю LSTM с использованием библиотеки Python Keras, в моих данных содержится образец из 131 видео, относящихся к 8 различным классам. Я установил последовательность кадров из 32 кадров для каждого видео (таким образом, каждое видео имеет 32 кадра и, следовательно, 131 видео, сгенерированных 4192 кадров). Я извлек особенности из предварительно обученной модели VGG16 для каждого из этих кадров. Я создал набор данных поезда, добавив каждую из этих извлеченных функций в массив. он сформировал окончательный массив из 4192,512 измерений. соответствующий train_labels содержит одно горячее кодирование для каждого из восьми классов и имеет размерность 4192,8. Однако, поскольку LSTM требуется форма входного сигнала (выборки, временная метка и особенность), а каждое видео в моем случае имеет последовательность из 32 кадров, поэтому я преобразовал обученные данные в [131,32,512] и применил такое же преобразование на train_labels. Однако, когда я запускаю это, я получаю следующую ошибку:
ValueError: Error when checking target: expected dense_2 to have 2 dimensions, but got
array with shape (131, 32, 8)
Если я не изменю форму train_labels и оставлю его как (4192,8), ошибка будет:
ValueError: Input arrays should have the same number of samples as target
arrays. Found 131 input samples and 4192 target samples.
обратите внимание, что поскольку каждое из моих видео имеет длину последовательности 32 кадра, я применил это изменение формы [131,32,512] для обучения данных и (131, 32, 8) для соответствующих меток. Буду признателен за любые комментарии или советы, чтобы решить эту проблему