目录

一、图片预处理

二、模型的构建与训练


一、图片预处理

因为数据集图片尺寸不一致,所以需要对图片进行预处理,试图片的长宽一致,如大小为200x200、150x150、100x100等。首先,加载图片预处理过程中需要的依赖库,包括对数组进行处理的Numpy库、用于对硬盘中文件进行处理的os库还有图片处理的cv2库。分别指定数据集在银盘中的储存位置、存储每一类图片数据的文件夹名称、图片处理过后的尺寸。

ps:没有下载库的同学:pip install opencv-python

pip install Numpy

import numpy as np
import os
import cv2
#数据集在硬盘中的存储位置
dataset_path = 'D:\image'
#存储猫与狗图片的文件夹名称分别称为cat与dog
categories = ['cat','dog']
图片经过处理后的尺寸
img_size = 100

定位到所有猫图片的文件夹,并指定猫图片标签为0。然后依次读取每一个文件夹中每一张猫的图片,最后将处理后的猫图片与对应的标签储存到一个新的数组中。同理,对狗也一样,标签定为1。

dataset = []
for category in categories:#依次获取猫或狗图片所在的文件夹folder_path = os.path.join(dataset_path,category)#将猫的图片标签设置为0,狗的图片设置为1class_num = categories.index(category)#获取文件夹中全部图片的名字,以列表的形式返回img_names = os.listdir(folder_path)#依次读取文件夹中的每一张图片,并对其进行处理for img_name in img_names:try:#将文件夹路径与图片名称进行拼接获取完整的图片路径img_path = os.path.join(folder_path,img_name)#读取图片img = cv2.imread(img_path,cv2.IMREAD_COLOR)#将图片的尺寸转换为100x100x3img = cv2.resize(img,(img_size,img_size))#将处理好的图片与对应标签存储在数据集中dataset.append((img,class_num))except Exception:pass

打乱数据集中的猫狗顺序

import random
random.shaffle(dataset)

最后,将数据集

#X储存处理好的图片,y储存图片对应的标签值
X=[]
y=[]
for img,label in dataset:X.append(img)y.append(label)
X = np.array(X).reshape(-1,img_size,img_size,3)
y = np.array(y)
np.save('X_cat_and_dog.npy')
np.save('y_cat_and_dog.npy')

中的图片与标签值分开,分别储存在x与y列表中。

二、模型的构建与训练

使用NumPy库中的load函数来读取使用save函数中储存的数据。使用sklearn模块中提供的train_test_split方法把数据集分成75%的训练集和25%的测试集。

from sklearn.model_selection import train_test_split
X = np.load('X_cat_and_dog.npy')
#图片像素的归一化
X = X/255.0
y = np.load('y_cat_and_dog.npy')
#将数据集划分
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.25)

构建模型:模型需要卷积层,最大池化层,扁平化层,全连接层,防止过拟合的Dropout,优化算法Adam。

首先使用卷积层,然后连接池化层,为了避免过拟合在每个池化层后面加入Dropout。在第一个卷积层中使用32个卷积核,并将卷积核尺寸指定为3x3,这样就会得到32个尺寸为98x98的特征图。在这个卷积层中指定激活函数为reLu,在最大池化层中指定滑动窗口尺寸为2x2,因此在卷积层中得到的32个尺寸为98x98的特征图经池化层处理后,变为32个尺寸为49x49的特征图。接下来,应用Dropout,并指定概率为0.2,这样的模型在每次训练时,都会有20%的单元被随机去除掉。最后连接扁平化层,并将扁平化层处理过后的数据连接到只有一个256个单元的隐藏层的全连接神经网络。

from keras.models import Sequential
from keras.layers import Conv2D,MaxPooling2D,Flatten,Dense,Dropout
from keras.optimizers import adam_v2
model = Sequential()
#第一个卷积层与第一个池化层
model.add(Conv2D(input_shape = X.shape[1:],filters=32,kernel_size=(3,3),activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.2))
#第二个卷积层与第二个池化层
model.add(Conv2D(filters=64,kernel_size=(3,3),activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.2))
#第三个卷积层与第三个池化层
model.add(Conv2D(filters=128,kernel_size=(3,3),activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.2))
#第四个卷积层与第四个池化层
model.add(Conv2D(filters=128,kernel_size=(3,3),activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.2))
#扁平化层
model.add(Flatten())
#全连接神经网络
model.add(Dense(256))
model.add(Dropout(0.2))
model.add(Dense(1, activation='sigmoid'))

为了防止过拟合,在训练中可以使用早停法(根据模型在验证集上的损失值来判断何时停止模型的训练),这里将patience参数值定为5,也就是说5次训练后,验证集上的损失值没有减小,则停止模型的训练。

from keras.callbacks import EarlyStopping
monitor = EarlyStopping(monitor = 'val_loss',patience=5,mode='auto',restore_best_weights=True)

将模型进行编译,因为是二分类任务,所以使用的损失函数为二元交叉熵,并指定Adam梯度下降优化算法来更新模型参数。

model.compile(loss='binary_crossentropy',optimizer=adam_v2.Adam(),metrics=['accuracy'])
model.fit(X_train,y_train,epochs=50,batch_size=64,verbose=2,callbacks=[monitor],validation_split=0.2)
model.save('fei_model2.h5')

CNN实战分类猫与狗图片相关推荐

  1. 卷积神经网络处理猫和狗图片(改进网络)

    卷积神经网络处理猫和狗图片(改进网络) 摘要:上一篇文章<卷积神经网络处理猫和狗图片>中,训练精度随着时间线性增加,直接接近100%,而验证精度则停留在70-72%,从上一篇文章可以看出图 ...

  2. 卷积神经网络处理猫和狗图片

    卷积神经网络处理猫和狗图片 1.将图像复制到训练.验证和测试的目录 import os, shutil #复制文件 # 原始目录所在的路径 # 数据集未压缩 original_dataset_dir ...

  3. 使用卷积神经网络(普通CNN和改进型LeNet)以及数据增强和迁移学习技巧识别猫和狗,并制作成分类器软件(基于Keras)

    数据集:https://www.microsoft.com/en-us/download/confirmation.aspx?id=54765 猫和狗的图片各自有12500张. 第一步 整理数据集,查 ...

  4. 怎样教一台计算机区分猫和狗?一文零基础入坑机器学习

    导读:机器学习是一个快速发展的研究领域,主要关注设计和分析能让计算机学习的算法.作为一门新兴学科,尽管有待发掘的知识比已经掌握的知识要多得多,但当前的机器学习方法已经被用于教计算机执行各种各样有用的任 ...

  5. 计算机基础猫狗,怎样教一台计算机区分猫和狗?一文零基础入坑机器学习

    01 教计算机区分猫和狗 在教孩子区分"猫"和"狗"时,几乎所有父母都不会告诉孩子某种形式的科学定义(例如,狗属于哺乳动物这个大类中犬科的一员,而猫属于相同大类 ...

  6. Top2:CNN 卷积神经网络实现猫狗图片识别二分类

    Top2:CNN 卷积神经网络实现猫狗图片识别二分类 系统:Windows10 Professional 环境:python=3.6 tensorflow-gpu=1.14 ```python &qu ...

  7. CNN简单实战:PyTorch搭建CNN对猫狗图片进行分类

    在上一篇文章:CNN训练前的准备:PyTorch处理自己的图像数据(Dataset和Dataloader),大致介绍了怎么利用pytorch把猫狗图片处理成CNN需要的数据,今天就用该数据对自己定义的 ...

  8. 11.CNN实现真实猫狗图片分类

    CNN实现真实猫狗图片分类 个人认为,和上一节的mnist数据集里面的手写数字图片不同之处就是,真实的图片更加复杂,像素点更多.因此在对应的图片预处理方面会稍微麻烦一些.但是这个例子能让我们可以处理自 ...

  9. 【Keras】 计算机视觉 CNN 实现猫狗图片分类

    目录 综述 图像预览 数据预处理 验证集 模型训练 训练结果 综述 本项目旨在通过一个公开数据集,训练一个可以将图片中的猫和狗进行分类的模型. 数据集包括25,000 张训练数据.其中猫和狗的照片各 ...

最新文章

  1. 基于开源TiRG的文本检测与提取实现
  2. PHP数据结构算法实例
  3. 序列化技术的选型-选型建议
  4. 关于计算性能的若干重要事实
  5. 2.6.29的一个节省内存的补丁
  6. vue 自定义键盘组件_vue 自定义 数字键盘+mint UI MessageBox的应用
  7. 利用云服务器搭建内网映射服务器
  8. 《深入解析windows操作系统第6版下册》第10章:内存管理(第三部分译文与图片)...
  9. 电脑保护眼睛的颜色设置
  10. 中点圆c语言程序,[图形学] 画圆(基于中点算法)
  11. 新手小心:c语言的强符号和弱符号
  12. 知乎 量子计算机 未来,知乎打脸媒体“无脑吹”昆仑量子计算模拟机
  13. 常见自动化测试工具,你用过哪些?
  14. 南京技师学院计算机系,江苏南京技师学院
  15. 使用MFC实现将图像的RGB值转换到HSV空间,同时进行调节HSV,再将调节后的HSV值传进去转换到RGB空间实现图像在HSV空间中的色度、饱和度、亮度的调节
  16. iOS中的时间和日期
  17. Vue基础之指令与过滤器
  18. 手机GPU性能评估指标
  19. html直角三角形怎么实现,CSS绘制三角形的实现代码(border法)
  20. Windows域控管理—如何使用powershell远程连接服务器

热门文章

  1. elementary os 配置单
  2. 进程CPU使用率计算
  3. 复制一个Word文档的部分或全部内容到另一个Word文档
  4. Python爬虫实现百度贴吧文本爬取【每天近千万级数据量】
  5. 3GPP 文档查看方法及部分关键协议
  6. Android 动态配置域名
  7. source insight python Python.CLF 语言包,设置source insight使之可以查看并编辑python文件
  8. 日K蜡烛图(2021-10-15)
  9. 哪些情况下企业需要支付经济补偿金
  10. ZZULIOJ 2829: 闯关游戏