本例程是一个处理图像数据的标准的分布过程,利用CNN 实现对狗的品种的鉴定。

实现过程在代码中会有相关注释。

本例程数据集资源在这 https://download.csdn.net/download/rh8866/12532963

import os
#这里用到opencv,需要安装此包(用了清华镜像)
#pip install -i https://mirrors.aliyun.com/pypi/simple/  opencv-python
import cv2
import numpy as np
import pandas as pd
#Tqdm 是一个快速,可扩展的Python进度条,可以在 Python 长循环中添加一个进度提示信息
from tqdm import tqdmimport seaborn as sns
import matplotlib.pyplot as pltimport sklearn
from sklearn.model_selection import train_test_split
#读取数据的标签
labels = pd.read_csv('./dataset/dog-breed/labels.csv')
labels.head()
#id是train数据集样本图片的名称 ,breed是标签

#看看数据的分类统计
breed_count = labels['breed'].value_counts()
breed_count.head(10)

breed_count.shape
#可以看到有120个种类# (120,)
#将标签转成one_hot形式
targets = pd.Series(labels['breed'])
one_hot = pd.get_dummies(targets,sparse=True)
one_hot_labels = np.asarray(one_hot)
#设置样本输入模型的参数
img_rows = 128
img_cols = 128
num_channel=1
#输出一张图片看看样式
img_1 = cv2.imread('./dataset/dog-breed/train/001513dfcb2ffafc82cccf4d8bbaba97.jpg',0)
plt.title('Original Image')
plt.imshow(img_1)#输出图片shape
print(img_1.shape)#(375, 500)

#由上面的输出可以看到图片是(375, 500) ,为了方便计算我们将其调整大小为128*128
img_1_resize = cv2.resize(img_1,(img_rows,img_cols))
print(img_1_resize.shape)
#(128, 128)
plt.title('Resized Image')
plt.imshow(img_1_resize)

x_feature = []
y_feature = []i = 0
#加载训练数据和标签
for f,img in tqdm(labels.values):train_img = cv2.imread('./dataset/dog-breed/train/{}.jpg'.format(f),0)label = one_hot_labels[i]train_img_resize = cv2.resize(train_img,(img_rows,img_cols))x_feature.append(train_img_resize)y_feature.append(label)i += 1

#将数据归一化
x_train_data = np.array(x_feature,np.float32) / 255.
print(x_train_data.shape)
#为了符合keras训练数据的格式,我们给数据增加一个纬度
x_train_data = np.expand_dims(x_train_data,axis = 3)
print(x_train_data.shape)#(10222, 128, 128)
#(10222, 128, 128, 1)
y_train_data = np.array(y_feature,np.uint8)
print(y_train_data.shape)#(10222, 120)
#分割训练集和验证集
x_train,x_val,y_train,y_val = train_test_split(x_train_data,y_train_data,test_size=0.2,random_state=2)
print(x_train.shape)
print(x_val.shape)#(8177, 128, 128, 1)
#(2045, 128, 128, 1)
#接下来我们对测试数据做同样的操作
submission = pd.read_csv('./dataset/dog-breed/sample_submission.csv')
test_img = submission['id']
test_img.head()

x_test_feature = []
i = 0
for f in tqdm(test_img.values):img = cv2.imread('./dataset/dog-breed/test/{}.jpg'.format(f),0)img_resize = cv2.resize(img,(img_rows,img_cols))x_test_feature.append(img_resize)

#数据归一化
x_test_data = np.array(x_test_feature, np.float32) / 255.
print (x_test_data.shape)
#增加一个纬度
x_test_data = np.expand_dims(x_test_data, axis = 3)
print (x_test_data.shape)# (10357, 128, 128)
# (10357, 128, 128, 1)
#现在我们的训练数据,验证数据以及测试聚居都准备妥当,接下来我们开始构建模型from keras.models import Sequential
from keras.layers import Dense,Dropout
from keras.layers import Convolution2D
from keras.layers import MaxPooling2D
from keras.layers import Flatten
#我们构建一个简单的CNN 模型model = Sequential()
#卷积层
model.add(Convolution2D(filters = 64,kernel_size = (4,4),padding = 'Same',activation='relu',input_shape = (img_rows,img_cols,num_channel)))
#池化 最大池化
model.add(MaxPooling2D(pool_size=(2,2)))
#卷积层
model.add(Convolution2D(filters = 64,kernel_size = (4,4),padding='Same',activation='relu'))
#最大池化
model.add(MaxPooling2D(pool_size=(2,2)))
#展平数据
model.add(Flatten())
#全连接
model.add(Dense(units=120,activation='relu'))
#输出层(由上面可知有120个输出)
model.add(Dense(units=120,activation='softmax'))
#编译模型
model.compile(optimizer='adam',loss = "categorical_crossentropy",metrics=['accuracy'])
model.summary()
#模型结构如下

#开始训练,我们设batch_size = 128,为了能节约时间 epochs为 2(我们只是关注该案例的个工作方法和流程,至于计算速度和准确度暂时我们不考虑,将在后续的博客中探讨这个问题)
batch_size = 128
nb_epochs = 2
history = model.fit(x_train,y_train,batch_size=batch_size,epochs=nb_epochs,verbose=2,validation_data=(x_val,y_val),initial_epoch=0)

results = model.predict(x_test_data)
prediction = pd.DataFrame(results)
col_names = one_hot.columns.values
prediction.columns = col_names
prediction.insert(0, 'id', submission['id'])submission = prediction
submission.head()

#保存预测结果
submission.to_csv('new_submission.csv', index=False)

至此本例程就结束了,精确度暂不考虑,勿喷,有好的建议欢迎评论讨论。

用卷积神经网络实现对小狗品种的识别相关推荐

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

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

  2. Kaggle深度学习与卷积神经网络项目实战-猫狗分类检测数据集

    Kaggle深度学习与卷积神经网络项目实战-猫狗分类检测数据集 一.相关介绍 二.下载数据集 三.代码示例 1.导入keras库,并显示版本号 2.构建网络 3.数据预处理 4.使用数据增强 四.使用 ...

  3. 使用预处理的卷积神经网络来检测猫狗图片

    使用预处理的卷积神经网络来检测猫狗图片 文章目录 系列文章目录 前言 一.预训练网络是什么? 二.特征提取 1.将VGG16卷积基实例化 2.使用预训练的卷积基提取特征 3.绘制图像 总结 前言 本文 ...

  4. 基于卷积神经网络VGG的猫狗识别

    !有需要本项目的实验源码的可以私信博主! 摘要:随着大数据时代的到来,深度学习.数据挖掘.图像处理等已经成为了一个热门研究方向.深度学习是一个复杂的机器学习算法,在语音和图像识别方面取得的效果,远远超 ...

  5. CV之CNN:基于tensorflow框架采用CNN(改进的AlexNet,训练/评估/推理)卷积神经网络算法实现猫狗图像分类识别

    CV之CNN:基于tensorflow框架采用CNN(改进的AlexNet,训练/评估/推理)卷积神经网络算法实现猫狗图像分类识别 目录 基于tensorflow框架采用CNN(改进的AlexNet, ...

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

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

  7. 深度学习 卷积神经网络即插即用的小插件

    卷积神经网络即插即用的小插件 前言 卷积神经网络设计技巧 小插件 STN ASPP Non-local SE CBAM DCN v1&v2 BlurPool RFB ASFF 代码实现 前言 ...

  8. 简单的卷积神经网络,实现手写英文字母识别

    简单的卷积神经网络,实现手写英文字母识别 1 搭建Python运行环境(建议用Anaconda),自学Python程序设计 安装Tensorflow.再安装Pycharm等环境.(也可用Pytorch ...

  9. 基于卷积神经网络的近红外夜间道路行人识别

    near infrared nighttime road pedestrians recognition based on convolutional neural network 题目:基于卷积神经 ...

最新文章

  1. Android 中 include的使用
  2. 项目经理的超越(三)人际优先,做事上的超越
  3. 逻辑回归Logistic Regression 模型简介
  4. Filesystem has errors解决办法
  5. 【PM模块】维护处理的控制和报告
  6. php模拟请求get请求,php模拟get请求方法总结
  7. boost::noinit_adaptor用法实例
  8. vim系统配置文件,配置专属自己的环境
  9. 如何用程序实现对IE中scripts的控制(禁止和允许)
  10. python能做什么游戏-你也可以用Python开发出一款火遍全球的游戏!
  11. 有趣的算法(七):3分钟看懂希尔排序(C语言实现)
  12. 服务器显示器分辨率,屏幕分辨率修改
  13. 等保2.0二级安全要求
  14. Wingdings 2 符号编码对照表
  15. Uint8 Uint16等的区别
  16. 叫谁修猫呢?叫蓝总|ONES 人物
  17. 联想微型计算机如何设置u盘启动,联想电脑如何设置U盘启动?联想电脑bios设置U盘启动教程...
  18. 三,mergetool和difftool
  19. web项目图片/文件保存方式
  20. TDUCK-PRO表单系统版本部署教程-详细

热门文章

  1. 电脑蓝屏错误代码大全及解决办法
  2. vcs 覆盖率收集2——覆盖率选项 + 合并覆盖率
  3. 高一c语言期末试题,江苏省海安高中2020-2021学年高一上学期期中考试信息技术试题 Word版含答案...
  4. StatisticalOutlierRemoval 过滤器去除异常值
  5. 阶乘约数-蓝桥杯国赛java
  6. 数据科学中的计量经济学技术
  7. 便利蜂被指借考试裁员 创始人:体面生活靠奋斗不是靠躺地打滚
  8. 前端性能优化 —— 前端性能分析
  9. 机器学习基础笔记(自用)
  10. Eclipse SVN 冲突的 介绍 及 四种解决方式