我正在使用LSTM对视频进行分类。我正在使用Keras python库创建长期短期记忆LSTM网络。我知道LSTM采用数据的输入形状(样本,时间戳,功能)。我有三节视频,每节有10个视频文件。这意味着我有10 * 3 = 30个样本。 我为这些视频文件中的每个视频创建了帧序列。这些序列中的每个序列都包含32帧视频文件。我使用训练有素的模型提取特征,因此我将这些帧中的每一个输入VGG16预训练模型中,该模型为单个帧生成512个特征。因此,一个视频文件应具有(32,512)个尺寸的数组。然后,我将所有30个样本的每个数组附加到一个数组中,并将其另存为numpy数组。数组的最终尺寸为(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)
答案 0 :(得分:1)
如果通过附加30个维度(32、512)样本获得960个值,则只需使用np.reshape即可将数组调整为期望的尺寸。
x_generator = np.reshape(x_generator, [30, 32, 512])