CNNLSTM2D 实现

有 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())

    

新错误:

http://img.mukewang.com/64b6501a0001b74305830302.jpg


慕姐4208626
浏览 135回答 1
1回答

桃花长相依

我认为问题在于卷积 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 sequencessequences = <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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python