Error when checking input: expected time_distributed_184_input to have 5 dimensions, but got array with shape (32, 224, 224, 3)
I am trying to do an image classification, not the one like cat vs dog but the one with time series in it. Such as predict the dog is running etc. I have compiled the model but faced error when I am trying to use the fit.generator
The code is:
train_datagen = ImageDataGenerator(rescale=1./255, shear_range=0.2, zoom_range=0.2, rotation_range=45, horizontal_flip=True, vertical_flip=True, validation_split = .2) validation_datagen = ImageDataGenerator(rescale=1./255, validation_split = .2) test_datagen = ImageDataGenerator(rescale = 1./255) train_generator = train_datagen.flow_from_directory(directory=r'C:\Users\wuboy\MA0218\CNN\train', target_size=(224, 224), color_mode="rgb", batch_size=32, class_mode='categorical', shuffle=True, seed=42) validation_generator = validation_datagen.flow_from_directory(directory=r'C:\Users\wuboy\MA0218\CNN\validation', target_size=(224, 224), color_mode="rgb", batch_size=32, class_mode='categorical', shuffle=True, seed=42) test_generator = test_datagen.flow_from_directory(directory=r'C:\Users\wuboy\MA0218\CNN\test', target_size=(224, 224), color_mode="rgb", batch_size=1, class_mode=None, shuffle=False, seed=42) num_classes = 4 model = Sequential() #First conv, 64 model.add(TimeDistributed(Conv2D(64, (3,3), padding='same', strides=(2,2), activation='relu',input_shape = (5, 224, 224, 3)))) model.add(TimeDistributed( Conv2D(64, (3,3), padding='same', strides=(2,2), activation='relu'))) model.add(TimeDistributed(MaxPooling2D((2,2), strides=(2,2)))) # Second conv, 128 model.add(TimeDistributed(Conv2D(128, (3,3),padding='same', strides=(2,2), activation='relu'))) model.add(TimeDistributed( Conv2D(128, (3,3),padding='same', strides=(2,2), activation='relu'))) model.add(TimeDistributed(MaxPooling2D((2,2), strides=(2,2)))) #Third conv. 256 model.add(TimeDistributed(Conv2D(256, (3,3),padding='same', strides=(2,2), activation='relu'))) model.add(TimeDistributed( Conv2D(256, (3,3),padding='same', strides=(2,2), activation='relu'))) model.add(TimeDistributed(MaxPooling2D((2,2), strides=(2,2)))) #Fourth conv, 512 model.add(TimeDistributed(Conv2D(512, (3,3),padding='same', strides=(2,2), activation='relu'))) model.add(TimeDistributed( Conv2D(512, (3,3),padding='same', strides=(2,2), activation='relu'))) model.add(TimeDistributed(MaxPooling2D((2,2), strides=(2,2)))) #Fifth conv, 1024 model.add(TimeDistributed(Conv2D(1024, (3,3),padding='same', strides=(2,2), activation='relu'))) model.add(TimeDistributed( Conv2D(1024, (3,3),padding='same', strides=(2,2), activation='relu'))) model.add(TimeDistributed(MaxPooling2D((2,2), strides=(2,2)))) model.add(Flatten()) model.add(Dense(10)) model = Sequential() # after having Conv2D... model.add(TimeDistributed(Conv2D(64, (3,3), activation='relu'), input_shape=(5, 224, 224, 3))) model.add(TimeDistributed(Conv2D(64, (3,3), activation='relu'))) model.add(TimeDistributed(GlobalAveragePooling2D())) model.add(LSTM(1024, activation='relu', return_sequences=False)) model.add(Dense(1024, activation='relu')) model.add(Dropout(.5)) model.add(Dense(4, activation='sigmoid')) model.compile('adam', loss='categorical_crossentropy') model.summary() STEP_SIZE_TRAIN=train_generator.n//train_generator.batch_size STEP_SIZE_VALID=validation_generator.n//validation_generator.batch_size model.fit_generator(generator=train_generator, steps_per_epoch=50, validation_data=validation_generator, validation_steps=STEP_SIZE_VALID, epochs=30)
I suspect that I have missed a parameter in the datagen_parameter section but I am not really sure of it. The model have been compiled but I am stuck at this step QAQ