为了账号安全,请及时绑定邮箱和手机立即绑定

CNNLSTM2D 实现

CNNLSTM2D 实现

慕姐4208626 2023-07-18 16:39:49
有 2550 张图像作为训练集,1530 张图像作为测试集。为了将这些图像分为两类,使用了混合深度学习模型,但在运行代码期间出现错误,如下所示。我想知道是否有人帮助我了解错误原因。谢谢错误:检查输入时:预期 conv_lst_m2d_39_input 有 5 个维度,但得到形状为 (32, 64, 64, 3) 的数组  # importing libraries    from keras.models import Sequential    from keras.layers import Convolution2D    from keras.layers import MaxPooling2D    from keras.layers import Flatten    from keras.layers import Dense    import tensorflow as tf    from keras.layers.convolutional_recurrent import ConvLSTM2D    from keras.layers.normalization import BatchNormalization        #Data_Prprocessing    from keras.preprocessing.image import ImageDataGenerator    train_datagen = ImageDataGenerator(                                        rescale=1./255,                                        shear_range=0.2,                                        zoom_range=0.2,                                        horizontal_flip=True)    test_datagen = ImageDataGenerator(rescale=1./255)    training_set = train_datagen.flow_from_directory(                                        'D:\\thesis\\Paper 3\\Feature Extraction\\two_dimension_Feature_extraction\\stft_feature\\Training_set',                                        target_size=(64, 64),                                        batch_size=32,                                        class_mode='binary')    test_set = test_datagen.flow_from_directory(                                        'D:\\thesis\\Paper 3\\Feature Extraction\\two_dimension_Feature_extraction\\stft_feature\\Test_set',                                        target_size=(64, 64),                                        batch_size=32,                                        class_mode='binary')        #initializing the CNN    classifier = Sequential()        classifier.add(ConvLSTM2D(filters=40, kernel_size=(3, 3),input_shape=(None, 64, 64, 3),  padding='same', return_sequences=True))        classifier.add(BatchNormalization())    新错误:
查看完整描述

1 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

我认为问题在于卷积 LSTM 层需要图像的时间序列,因此它必须具有 5 个维度,包括批量维度,因此形状为(B, T, H, W, C)。您已将输入形状(忽略批量维度)定义为(None, 64, 64, 3),因此您需要输入形状为 的批量张量(batch, timesteps, 64, 64, 3)

另外,我认为fit_generator()不赞成将生成器传递给fit().

编辑:如果您有视频流中的一系列帧,您可以将它们堆叠到一个多维的数组中。您必须以正确的顺序从目录中手动获取图像,然后创建一个数据迭代器:

images = <ordered list of 3-D numpy arrays>

img_seq = np.stack(images, axis=0)


# Do the above for each sequence of images in the training data to get N sequences

sequences = <list of sequences of images of length N>

labels = <array of labels of length N>


train_data = tf.data.Dataset.from_tensor_slices((sequence, labels))

train_data = train_data.shuffle(1000).batch(batch_size)

# Do similar for test data

然后您可以使用tf.data.Datasetin fit():


model.fit(train_data, validation_data=test_data)


查看完整回答
反对 回复 2023-07-18
  • 1 回答
  • 0 关注
  • 145 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信