基于卷积神经网络(CNN)的猫狗图像分类系统实现

CNN模型(来自慕课网):

训练数据集

 链接:https://pan.baidu.com/s/1Y0Uszlh8bo5iC0OV1MRiow?pwd=data 
提取码:data

数据集自己做分割,可以4000张图片为一个测试集和训练集,我这里演示的是4000张为训练集和测试集。你们可以根据自己的要求来进行修改以达到更好的目的。(测试了一下还是建议全部都为训练集,测试集自己找一下)

1.目的

基于data数据,根据提供的结构,建立CNN模型,识别图片中的猫/狗,计算预测准确率:  

1.识别图片中的猫/狗、计算data测试数据预测准确率  

2.从网站下载猫/狗图片,对其进行预测  

2.训练模型

1.准备数据

#加载数据
from tensorflow.keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(rescale=1./255)

training_set = train_datagen.flow_from_directory('./data_小',target_size=(50,50),batch_size=32,class_mode='binary')

结果/解释

2.确认输入数据标签

#确认输入数据标签
training_set.class_indices

结果/解释

3.准备CNN model

#建立CNN模型
from keras.models import Sequential
from keras.layers import Conv2D, MaxPool2D, Flatten, Dense

model = Sequential()
#卷积层
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
model.add(Dense(units=128,activation='relu'))
model.add(Dense(units=1,activation='sigmoid'))

4.使用优化器

#配置模型
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])
model.summary()

结果/解释

5.训练模型

#训练模型
model.fit(training_set,epochs=25)

结果/解释:这里因为数据量较小所以就训练25轮,可以看到丢失率一直在降低,可以调高训练轮数以提高准确率。

至此,模型已经训练完毕了。

3.查看模型准确率

1.查看训练集准确率

#查看训练集准确率
accuracy_train = model.evaluate(training_set)
print(accuracy_train)

结果/解释:可以看到准确率还是挺高的

2.查看测试数据就准确率

#测试数据集准确率
test_set = train_datagen.flow_from_directory('./test_小',target_size=(50,50),batch_size=32,class_mode='binary')

accuracy_test = model.evaluate(test_set)
print(accuracy_test)

结果/解释:因为我这个测试集也是从那里面拿的,你们可以自己重新分割一下,或者找其他数据集来测试。

4.实际测试

1.网上下载图片实测一下:

#测试网上照片
import numpy as np  
from keras.preprocessing.image import load_img, img_to_array
pic_dog = 'dog.jpg'
pic_dog = load_img(pic_dog,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_11 = model.predict(pic_dog)
result_12 = (result_11 > 0.5).astype(int) 
print(result_12)
pic_cat = 'cat.jpg'
pic_cat = load_img(pic_cat,target_size=(50,50))
pic_cat = img_to_array(pic_cat)
pic_cat = pic_cat/255
pic_cat = pic_cat.reshape(1,50,50,3)
result_21 = model.predict(pic_cat)
result_22 = (result_21 > 0.5).astype(int) 
print(result_22)
training_set.class_indices

结果/解释:这个结果还是挺不错的

2.进行图片批量检索识别

#进行图片分类
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 matplotlib.image import imread
from keras.preprocessing.image import load_img
from keras.preprocessing.image import img_to_array
from keras.models import load_model
import numpy as np
a = [i for i in range(1,10)]
fig = plt.figure(figsize=(10,10))
for i in a:
    img_name = str(i)+'.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)
    result1 = model.predict(img)
    result = (result1 > 0.5).astype(int) 
    img_ori = load_img(img_name, target_size=(250, 250))
    plt.subplot(3,3,i)
    plt.imshow(img_ori)
    plt.title('预测为:狗狗' if result[0] == 1 else '预测为:猫咪')
plt.show()

结果/解释:这个结果也还是挺准确的,毕竟没有进行旋转和平移等操作,是直接在原图上进行操作的。

5.总结:

        在本文中,我们深入探讨了如何使用卷积神经网络(CNN)来构建一个猫狗图像分类系统。这个系统能够自动地从输入图像中识别出是猫还是狗,展示了深度学习在图像处理领域的强大能力。

        本文通过构建基于卷积神经网络的猫狗图像分类系统,展示了深度学习在图像处理领域的强大潜力和应用前景。从数据准备、模型设计与选择、模型训练与优化到模型评估与测试,我们详细介绍了整个实现过程,并探讨了系统的实际应用和未来发展方向。通过这次实践,我们不仅加深了对深度学习技术的理解,还积累了宝贵的项目经验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值