我正在使用keras和tensorflow处理图像分类问题。我使用VGG 16模型和Imagenet权重,并使用Keras的ImageDataGenerator导入数据。
现在,我一直在阅读到应该总是使用1./255来重新缩放图像以提高训练效率。然而,一旦我实现了缩放,我的模型的性能就比以前差得多。改变学习率和批量大小也没有帮助。
现在我在质疑这是否可能,或者我的模型是否有一些错误。我使用的是标准的。jpg图像文件。
from keras.preprocessing.image import ImageDataGenerator
IMAGE_SIZE = 224
BATCH_SIZE = 32
num_classes = 27
main_path = "C:/Users/abc/data"
final_path = os.path.join(main_path, "ML_DATA")
labels = listdir(gesamt_path)
data_generator = ImageDataGenerator(rescale=1./255, ### rescaling done here
validation_split=0.20)
train_generator = data_generator.flow_from_directory(final_path, target_size=(IMAGE_SIZE, IMAGE_SIZE), shuffle=True, seed=13,
class_mode='categorical', batch_size=BATCH_SIZE, subset="training")
validation_generator = data_generator.flow_from_directory(final_path, target_size=(IMAGE_SIZE, IMAGE_SIZE), shuffle=False, seed=13,
class_mode='categorical', batch_size=BATCH_SIZE, subset="validation")
模型定义和培训
vgg16_model = keras.applications.vgg16.VGG16(weights='imagenet', include_top=True)
model = Sequential()
for layer in vgg16_model.layers[:-1]:
model.add(layer)
for layer in model.layers:
layer.trainable = False
model.add(Dense(num_classes, activation='softmax'))
model.compile(Adam(lr=.001), loss='categorical_crossentropy', metrics=['accuracy'])
history = model.fit_generator(train_generator,
validation_data=validation_generator,
epochs=85, verbose=1,callbacks=[tbCallBack,earlystopCallback])
3条答案
按热度按时间1bqhqjot1#
可能是Imagenet权重与新的图像维度不兼容。
我看到你唯一可训练的层是最后一层,一个密集层,它对图像维度一无所知。我的建议是让前几个卷积层也是可训练的,这样这些层就可以适应缩放。
q1qsirdb2#
ResNet可能会从其图像数据中减去每像素均值,而不是除以255。来源:
3.4 Implementation
下的https://arxiv.org/pdf/1512.03385.pdfrxztt3cl3#
使用ResNet和imagenet权重,我使用以下方法改进了结果:
ImageDataGenerator(preprocessing_function=preprocess_input)
通过重新缩放,我也获得了更差的结果。
这些信息对我很有用:
https://github.com/matterport/Mask_RCNN/issues/231