接下来,给出我自己目前积累的代码,从目录中自动读取图像,并产生generator:
第一步:建立好目录结构和图像
可以看到目录images_keras_dict下有次级目录,次级目录下就直接包含照片了
**第二步:写代码建立预处理程序
# 先进行预处理图像
train_datagen = ImageDataGenerator(rescale=1./255,
rotation_range=50,
height_shift_range=[-0.005, 0, 0.005],
width_shift_range=[-0.005, 0, 0.005],
horizontal_flip=True,
fill_mode='reflect')
#再对预处理图像指定从目录中读取数据,可以看到我的目录最核心的地方是images_keras_dict(可以对照上一张图片)
train_generator = train_datagen.flow_from_directory('AgriculturalDisease_trainingset/images_keras_dict',
target_size=(height, width), batch_size=16)
val_datagen = ImageDataGenerator(rescale=1./255)
val_generator = val_datagen.flow_from_directory('AgriculturalDisease_validationset/images_keras_dict', target_size=(height, width),
batch_size=64)
save_weights = ModelCheckpoint(filepath='models/best_weights.hdf5',monitor='val_loss', verbose=1, save_best_only=True)
# 最后在fit_generator 中放入生成器的函数train_generator
model.fit_generator(train_generator,
steps_per_epoch=times_train,
verbose=1,
epochs=300,
initial_epoch=0,
validation_data=val_generator,
validation_steps=times_val,
callbacks=[save_weights, TrainValTensorBoard(write_graph=False)])
第三步:写入fit_generator进行训练
已经写在上一个代码中。
第四步:写predict_generator进行预测**
首先我们需要建立同样的目录结构。把包含预测图片的次级目录放在一个文件夹下,这个文件夹名就是关键文件夹。
这里我的关键文件夹是test文件夹
# 建立预处理
predict_datagen = ImageDataGenerator(rescale=1./255)
predict_generator = predict_datagen.flow_from_directory('AgriculturalDisease_validationset/test',
target_size=(height, width), batch_size=128)
# predict_generator.reset()
# 利用predict_generator进行预测
pred = model.predict_generator(predict_generator, max_queue_size=10, workers=1, verbose=1)
# 利用几个属性来读取文件夹和对应的分类
train_datagen = ImageDataGenerator(rescale=1./255, rotation_range=40, fill_mode='wrap')
train_generator = train_datagen.flow_from_directory('new_images', target_size=(height, width), batch_size=96)
labels = (train_generator.class_indices)
labels = dict((v,k) for k,v in labels.items())
predictions = [labels[k] for k in predicted_class_indices]
# 还可以知道图片的名字
filenames = predict_generator.filenames