Я пытаюсь провести классификацию изображений, но не такую, как кошка против собаки, а ту, в которой есть временные ряды. Например, предсказать, что собака бежит и т. Д. 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