keras+python3进行深度学习,实现猫狗分类

简介

keras是目前最流行的深度学习前端库,后端调用的是tensorflow等深度学习后端框架,其安装和使用较方便,适合初学者。

构建模型

训练样本数据如下,需要重新拷贝文件路径,将猫和狗分别放一个文件夹
keras+python3进行深度学习,实现猫狗分类_第1张图片
模型构建代码:

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("识别结果为:狗")

用来检验的图片
keras+python3进行深度学习,实现猫狗分类_第2张图片
结果如下:
keras+python3进行深度学习,实现猫狗分类_第3张图片
keras+python3进行深度学习,实现猫狗分类_第4张图片

你可能感兴趣的:(python,keras)