【问题标题】:How to input the sequence of the images in to LSTM network for video classification如何将图像序列输入到 LSTM 网络中进行视频分类
【发布时间】:2019-06-09 21:02:31
【问题描述】:

我正在使用 LSTM 对视频进行分类。我正在使用 Keras python 库来创建长期短期记忆 LSTM 网络。我知道 LSTM 采用(样本、时间戳、特征)中数据的输入形状。我有三类视频,每类都有 10 个视频文件。这意味着我有 10*3=30 个样本。 我为每个视频文件创建了一个帧序列。这些序列中的每一个都包含 32 帧视频文件。我使用经过训练的模型来提取特征,因此我将这些帧中的每一帧都输入到 VGG16 预训练模型中,它会为单个帧生成 512 个特征。所以一个视频文件应该有一个 (32,512) 维度的数组。然后,我将这些数组中的每一个附加到所有 30 个样本的单个数组中,并将其保存为 numpy 数组。数组的最终维度是 (960,512)。 现在我的问题是我应该如何将这个数组重塑为(样本,时间戳,特征)=(20,32,512)。这是我使用的代码的 sn-p:请注意 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)

【问题讨论】:

    标签: python keras generator lstm feature-extraction


    【解决方案1】:

    如果您通过附加维度 (32, 512) 的 30 个样本获得 960 个值,则只需使用 np.reshape 将数组重塑为预期维度。

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

    【讨论】:

    • 使用 [131,32,512] 对 131 个样本数据进行整形后,使用 [131,32,512] 进行训练,并对相应标签的 [131,32,8] 进行整形后,我收到以下错误:ValueError: Error when checks target: expected dense_8有 2 个维度,但得到了形状为 (131, 32, 8) 的数组 请注意我的 LSMT 网络是: NumberofClasses=8 model = Sequential() model.add(LSTM(256,dropout=0.2,input_shape=(32, 512 ))) model.add(Dense(1024, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(NumberofClasses, activation='softmax'))
    猜你喜欢
    • 2021-07-15
    • 2017-07-09
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多