Ошибка при проверке ввода: ожидалось, что time_distributed_184_input будет иметь 5 измерений, но получен массив с формой (32, 224, 224, 3) - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь провести классификацию изображений, но не такую, как кошка против собаки, а ту, в которой есть временные ряды. Например, предсказать, что собака бежит и т. Д. c. Я скомпилировал модель, но столкнулся с ошибкой, когда пытался использовать fit.generator

Код:

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)

Я подозреваю, что я пропустил параметр в разделе datagen_parameter, но Я не совсем уверен в этом. Модель была скомпилирована, но я застрял на этом этапе QAQ

...