keras是目前最流行的深度学习前端库,后端调用的是tensorflow等深度学习后端框架,其安装和使用较方便,适合初学者。
训练样本数据如下,需要重新拷贝文件路径,将猫和狗分别放一个文件夹
模型构建代码:
from keras.preprocessing.image import ImageDataGenerator
from keras.callbacks import ModelCheckpoint
from keras import models
from keras.layers import Conv2D, MaxPooling2D, Dense, Flatten, Dropout
def model():
model = models.Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(150, 150, 3)))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(128, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(128, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Flatten())
model.add(Dropout(0.5))
model.add(Dense(512, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
return model
# 训练数据增强
train_datagen = ImageDataGenerator(rescale=1. / 255,
# 表示图像随机旋转的角度范围
rotation_range=40,
# 图像在水平方向上平移的范围
width_shift_range=0.2,
# 图像在垂直方向上平移的范围
height_shift_range=0.2,
# 随机错切变换的角度
shear_range=0.2,
# 图像随机缩放的范围
zoom_range=0.2,
# 随机将一半图像水平翻转
horizontal_flip=True)
# 验证数据不能增强
validation_datagen = ImageDataGenerator(rescale=1. / 255)
train_dir = r"dataset\train"
validation_dir = r"dataset\validation"
train_generator = train_datagen.flow_from_directory(train_dir,
# 将所有图像的大小调整为150×150
target_size=(150, 150),
# 批量大小
batch_size=32,
class_mode='binary')
validation_generator = validation_datagen.flow_from_directory(validation_dir,
target_size=(150, 150),
batch_size=32,
class_mode='binary')
# 初始化模型
model = model()
# 用于配置训练模型(优化器、目标函数、模型评估标准)
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# 查看各个层的信息
model.summary()
# 回调函数,在每个训练期之后保存模型
model_checkpoint = ModelCheckpoint('model.hdf5', # 保存模型的路径
monitor='loss', # 被监测的数据
verbose=1, # 日志显示模式:0=>安静模式,1=>进度条,2=>每轮一行
save_best_only=True) # 若为True,最佳模型就不会被覆盖
# 用history接收返回值用于画loss/acc曲线
history = model.fit_generator(train_generator,
steps_per_epoch=100,
epochs=100,
callbacks=[model_checkpoint],
validation_data=validation_generator,
validation_steps=50)
以上代码将训练结果保存为model.hdf5文件,以便后面调用。附上模型结果下载地址:
链接:https://pan.baidu.com/s/1e2oGHl-Te9g-UZJ6hs-qXQ
提取码:u1fj
调用上面生成的模型文件,再输入图片验证模型效果,代码如下:
from keras.preprocessing import image
from keras.models import load_model
from keras.preprocessing.image import ImageDataGenerator
# 加载训练好的模型
model = load_model('model.hdf5')
# 查看单张图片结果(load_img中路径名称需修改)
img = image.load_img('77.jpg', target_size=(150, 150))
x = image.img_to_array(img) / 255.
x = x.reshape((1,) + x.shape)
xx = model.predict_classes(x)
yy = model.predict(x)
if xx[0][0]==0:
print("识别结果为:猫")
else:
print("识别结果为:狗")