CNN 猫狗图像分类

加载数据

from keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(rescale=1./255)
training_set = train_datagen.flow_from_directory("E:\\PycharmProjects\\Learning\\dataset\\train",target_size=(50,50),batch_size=32,class_mode="binary")

建立CNN模型


from keras.models import Sequential
from keras.layers import Conv2D,MaxPool2D,Flatten,Dense

model = Sequential()
#卷积层 32个 大小3x3 输入大小 50X50 3通道 激活函数 relu
model.add(Conv2D(32,(3,3),input_shape=(50,50,3),activation="relu"))
#池化层
model.add(MaxPool2D(pool_size=(2,2) ) )
#卷积层 
model.add(Conv2D(32,(3,3),activation="relu"))
#池化层
model.add(MaxPool2D(pool_size=(2,2) ) )
#flattening layer
model.add(Flatten())

#FC layer 全连接层
#128个神经元
model.add(Dense(units=128,activation="relu" ) )
model.add(Dense(units=1,activation="sigmoid"))#0/1二分类 用sigmoid

model.compile(optimizer="adam",loss="binary_crossentropy",metrics=['accuracy'])#最后是看训练效果的

model.summary()

在这里插入图片描述

训练模型

model.fit_generator(training_set,epochs=25)

在这里插入图片描述

训练效果

#模型 训练数据准确率
accuracy = model.evaluate_generator(training_set)
print(accuracy)

[0.011205723509192467, 1.0]

分别为 损失函数值,准确率

# 测试数据准确率
test_set = train_datagen.flow_from_directory("E:\\PycharmProjects\\Learning\\dataset\\validation",target_size=(50,50),batch_size=32,class_mode="binary")
accuracy_test = model.evaluate_generator(test_set)
print(accuracy_test)

[0.8898767232894897, 0.7170000076293945]

CNN训练图像需要很大的数据集

预测单张图片

#查看标签
print(type(training_set),training_set.class_indices)

<class ‘keras.preprocessing.image.DirectoryIterator’> {‘cats’: 0, ‘dogs’: 1}

标签 0是猫 1是狗

from keras.preprocessing.image import load_img,img_to_array

pic_dog = load_img("E:\\PycharmProjects\\Learning\\dataset\\dog_test.jpg",target_size=(50,50))
pic_dog = img_to_array(pic_dog)
pic_dog = pic_dog/255 #维度转换
pic_dog = pic_dog.reshape(1,50,50,3)
result = model.predict_classes(pic_dog)
print(result)

在这里插入图片描述

结果 [[1]]
预测 猫的图片

在这里插入图片描述

结果 [[0]]

批量预测

import matplotlib as mlp
font2 = {'family':"SimHei",
         'weight':'normal',
         'size':20}
mlp.rcParams['font.family']='SimHei'
mlp.rcParams['axes.unicode_minus']=False
from matplotlib import pyplot as plt
from keras.preprocessing.image import load_img,img_to_array
a = [ i for i in range(1,10)]
fig = plt.figure(figsize=(10,10))
for i in a:
    img_name = "E:\\PycharmProjects\\Learning\\dataset\\validation\\cats\\cat.20"+str(i).zfill(2)+".jpg"
    img_ori = load_img(img_name,target_size=(50,50))
    img = img_to_array(img_ori)
    img = img.astype('float32')/255
    img = img.reshape(1,50,50,3)
    result = model.predict_classes(img)
    img_ori = load_img(img_name,target_size=(250,250))
    plt.subplot(3,3,i)
    if(result[0][0] == 1):
        img_show = img_ori.convert('1')
        #img_ori.convert('L')#错误的显示灰色#img_ori.convert('1')#错误的显示黑白
        plt.imshow(img_show)
    if(result[0][0] == 0):
        plt.imshow(img_ori)
    plt.title("预测为 狗" if result[0][0] == 1 else "预测为 猫")
plt.show()

在这里插入图片描述
效果一般般…

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nickdlk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值