- 从数据集加载图像
training_set = image_dataset_from_directory( data_dir, validation_split=0.3, subset="training", seed=123, image_size=(img_height, img_width), batch_size=batch_size, label_mode='categorical', color_mode='rgb', shuffle=True, )
- 模型
num_classes = 10model = Sequential()model.add(ConvLSTM2D(filters=64, kernel_size=(3,3), activation='relu', input_shape=(10,img_height,img_width,3)))model.add(Dropout(0.2))model.add(Flatten())model.add(Dense(100, activation='relu'))model.add(Dense(num_classes, activation='softmax')) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
-
model.fit_generator()
model.fit_generator(generator=training_set,validation_data=testing_set,verbose=1,callbacks=callbacks,epochs=120)
回答:
ConvLSTM2D 期望输入为 5D tensor
,形状为:(samples, time, rows, cols, channels)
,主要用于时间序列、序列类型的数据。
对于图像分类,你需要将代码从:
model.add(ConvLSTM2D(filters=64, kernel_size=(3,3), activation='relu', input_shape=(10,img_height,img_width,3)))
更改为:
# 将 ConvLSTM2D 更改为 Conv2D,并从 input_shape 中移除 10model.add(Conv2D(filters=64, kernel_size=(3,3), activation='relu', input_shape=(img_height,img_width,3)))
另外,对于图像数据集,请使用 SparseCategoricalCrossentropy 作为损失函数。
model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(), metrics=['accuracy'])
请参考此处以获取关于图像分类的详细了解。