CNN网络进行图像识别

  • 简介
    • 第一步获取数据集
    • 展示前24张图片
    • 所有数据集除以255重构图像
    • 将数据分解为测试集、训练集、验证集
    • 开始构建卷积神经网络
    • 模型训练开始!
    • 测试集预测
    • 结果展示!!!!!
    • 感言:

简介

**本文使用keras(2.1.4)----其他版本有坑. 网络框架搭建CNN网络,对cifar10数据集进行图像识别,cifar10是一种自带label的图像数据集,数据集种类十分丰富可以很好的检验网络性能,话不多说直接进入正题 **

第一步获取数据集

通过keras可以直接下载cifar10数据集(数据集比较大可能需要一些时间)

import keras
#使用cifar10数据集
from keras.datasets import cifar10
(x_train, y_train), (x_test, y_test) = cifar10.load_data()

展示前24张图片

观察数据集的部分样本别问为什么,要有一个程序员的严谨!!严谨!!严谨!!(重要的事说3遍)

import numpy as np
import matplotlib.pyplot as pltfig = plt.figure(figsize=(20,5))
for i in range(36):ax = fig.add_subplot(3, 12, i + 1, xticks=[], yticks=[])ax.imshow(np.squeeze(x_train[i]))

所有数据集除以255重构图像

因为图像单个像素中最大值为255,将其除以255是将每一个像素缩放到0-1之间,类似于标准化

x_train = x_train.astype('float32')/255
x_test = x_test.astype('float32')/255

将数据分解为测试集、训练集、验证集

from keras.utils import np_utils# 将标签转化为one-hot
num_classes = len(np.unique(y_train))
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)# 将数据分解为训练集和测试集
(x_train, x_valid) = x_train[5000:], x_train[:5000]
(y_train, y_valid) = y_train[5000:], y_train[:5000]# 输出训练集形状
print('x_train shape:', x_train.shape)# 输出每一个集合的长度
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')
print(x_valid.shape[0], 'validation samples')

开始构建卷积神经网络

from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
#初始化网络类型,选择顺序网络
model = Sequential()
#添加卷积层,使用same填充,relu激活
model.add(Conv2D(filters=16, kernel_size=2, padding='same', activation='relu', input_shape=(32, 32, 3)))
#添加池化层
model.add(MaxPooling2D(pool_size=2))
model.add(Conv2D(filters=32, kernel_size=2, padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=2))
model.add(Conv2D(filters=64, kernel_size=2, padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=2))
#舍弃部分神经元,避免过拟合
model.add(Dropout(0.3))
#数据扁平化
model.add(Flatten())
model.add(Dense(500, activation='relu'))
model.add(Dropout(0.4))
model.add(Dense(10, activation='softmax'))
#模型确认
model.summary()
#模型启动,定义损失函数,优化器,评分标准
model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy'])

模型训练开始!

心疼一波没有GPU的小伙伴。。。

from keras.callbacks import ModelCheckpoint   #训练模型
checkpointer = ModelCheckpoint(filepath='model.weights.best.hdf5', verbose=1, save_best_only=True)
hist = model.fit(x_train, y_train, batch_size=32, epochs=100,validation_data=(x_valid, y_valid), callbacks=[checkpointer], verbose=2, shuffle=True)

测试集预测

终于到了激动人心的时刻,想不想知道自己搭建的模型的性能? 等着吧!

# 获取训练集预测
y_hat = model.predict(x_test)# 定义文本标签--来源:(source: https://www.cs.toronto.edu/~kriz/cifar.html)
cifar10_labels = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']

结果展示!!!!!

# 展示样本训练结果
fig = plt.figure(figsize=(20, 8))
for i, idx in enumerate(np.random.choice(x_test.shape[0], size=32, replace=False)):ax = fig.add_subplot(4, 8, i + 1, xticks=[], yticks=[])ax.imshow(np.squeeze(x_test[idx]))pred_idx = np.argmax(y_hat[idx])true_idx = np.argmax(y_test[idx])ax.set_title("{} ({})".format(cifar10_labels[pred_idx], cifar10_labels[true_idx]),color=("green" if pred_idx == true_idx else "red"))

感言:

说实话图像识别的发展是一个很漫长的过程,通过结果可以发现有时候我们确实有点为难机器了,不信你们自己看看那训练结果。。 有些图片你自己都不知道是什么东西。。 还有一点 感谢各位的支持 !拜拜?!

还没完。 没有GPU的小伙伴可以去亚马逊申请免费的GPU服务器后 嘿嘿?
最后像提供数据集的前辈们致敬!

CNN网络进行图像识别相关推荐

  1. 基于tensorflow、CNN网络识别花卉的种类(图像识别)

    基于tensorflow.CNN网络识别花卉的种类 这是一个图像识别项目,基于 tensorflow,现有的 CNN 网络可以识别四种花的种类.适合新手对使用 tensorflow进行一个完整的图像识 ...

  2. 学术 | 一种新的CNN网络可以更高效地区分自然图像生成图像

    作者 | Weize Quan , Kai Wang, Dong-Ming Yan , Xiaopeng Zhang 译者 | linstancy 编辑 | Jane 出品 | AI 科技大本营 [导 ...

  3. 抽取CNN网络任意层的特征,VGG模型fine-tuning实践

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx 作为迁移学习的一种,finetune能够将general的特征转变为special的特征,从而 ...

  4. 四大经典CNN网络技术原理

    AI科技评论按:2017年2月28日下午3点,<TensorFlow实战>作者黄文坚做客[硬创公开课],为我们讲解了关于四大经典CNN网络:AlexNet.VGGNet.Google In ...

  5. 从零开始的深度学习(一) 经典CNN网络 LeNet-5

    从零开始的深度学习(一) 经典CNN网络 LeNet-5 之前的四篇博客围绕着一个大作业项目来进行的入门,由于小白初涉,因此行文中有时侧重于某些并不重要的东西,同时也忽略了许多其实蛮重要的东西,再加上 ...

  6. 数据科学家分享:AI之主流CNN网络的架构分析

    1 绪论 20世纪60年代,Hubel等人通过对猫视觉皮层细胞的研究,提出了感受野这个概念,到80年代,Fukushima在感受野概念的基础之上提出了神经认知机的概念,可以看作是卷积神经网络的第一个实 ...

  7. 图解10大CNN网络架构,通俗易懂!

    点击 机器学习算法与Python学习 ,选择加星标 精彩内容不迷路 作者 | Raimi Karim,出品 | AI科技大本营(ID: rgznai100) 本文精心选取了 10 个 CNN 体系结构 ...

  8. 通俗易懂:图解10大CNN网络架构

    作者 | Raimi Karim 译者 | Major 编辑 | 赵雪 出品 | AI科技大本营(ID: rgznai100) 导语:近年来,许多卷积神经网络( CNN )跃入眼帘,而随着其越来越深的 ...

  9. 远场语音识别错误率降低30%,百度提基于复数CNN网络的新技术

    [12月公开课预告],入群直接获取报名地址 12月11日晚8点直播主题:人工智能消化道病理辅助诊断平台--从方法到落地 12月12日晚8点直播:利用容器技术打造AI公司技术中台 12月17日晚8点直播 ...

最新文章

  1. 实战 | 深度学习轻松学:如何用可视化界面来部署深度学习模型 转载 2017年12月27日 00:00:00 109 翻译 | AI科技大本营 参与 | 王赫 上个月,我有幸结识了 DeepCogn
  2. 山寨一把QQ移动终端聊天框,网页版效果其实也很好的!
  3. iOS中XML解析汇总
  4. java门槛_Java的入行门槛高吗?对学历有限制吗?
  5. 5月16日 AJAX
  6. 明晚来墨天轮直播间,听杨长老聊聊Oracle数据库并行的是是非非
  7. php中的变量函数,PHP中的一些路径变量或函数
  8. git ssh配置文件 服务器_【GIT】日常开发中的这些Git技巧你知道吗?
  9. express 文件服务器,Express搭建一个简单后台服务器
  10. 为什么我们公司强制弃坑Fastjson了?主推...
  11. 计算机硬件不仅使用二进制,【判断题】计算机硬件中不仅使用二进制表示数据,也经常使用十六进制。...
  12. pandas内置数据集_如何用pandas划分数据集实现训练集和测试集
  13. 【忆往昔】我欠老牛两本书
  14. Unity性能优化之Resources System
  15. python求一组数的最大值_用python实现在一组数据中,寻找到最大数和最小数并输出最大数和最小数所在的位置...
  16. CTB全球创新大挑战组队中 全新课题火热来袭
  17. Js中身份证验证及社会统一信用代码验证
  18. /,./和../的区别
  19. 使用html canvas制作简易画板
  20. Qt QImage scaled方法缩放中的问题

热门文章

  1. 【技巧】笔记本外接显示器配置教程(个人向)
  2. mysql+地图网格数据下载_离线地图
  3. python格式化字符串format函数
  4. 关于使用SQLALCHEMY 出现warning 的问题解决【SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and】
  5. 图文:eclipse中SVN分支合并到主干
  6. 手动创建 vue2 ssr 开发环境
  7. 程序员为什么技术这么厉害,赚得钱却不多?
  8. 【AD】Altium Designer PCB文件的绘制(下篇:PCB布线和后续)
  9. Python大蟒蛇平台是干什么用的?
  10. PHP中in_array 效率及其优化