Cifar10是一个封装好的数据集,里面包括10中类别的事物。而LeNet-5是最先提出来的卷积神经网络,在之前的学习中,我们并没有利用LeNet-5网络进行分类,本次实验我们来看一下基于Lenet-5对cifar10分类的效果。

1.导入库

import tensorflow as tf
import numpy as np
import os,PIL
import matplotlib.pyplot as plt
from tensorflow import keras
from tensorflow.keras import datasets,layers,models

2.数据处理

(train_images,train_labels),(test_images,test_labels) = tf.keras.datasets.cifar10.load_data()
train_images = train_images / 255.0
test_images = test_images / 255.0#归一化all_labels_name = ['airplane', 'automobile', 'bird', 'cat', 'deer','dog', 'frog', 'horse', 'ship', 'truck']
train_db = tf.data.Dataset.from_tensor_slices((train_images,train_labels))
train_db = train_db.shuffle(1000).batch(batch_sizes)
test_db = tf.data.Dataset.from_tensor_slices((test_images,test_labels))
test_db = test_db.batch(batch_sizes)

参数设置

batch_sizes = 128
epochs = 50

数据如下所示:

3.LeNet-5

经典到不能再经典的图片

model = tf.keras.Sequential([tf.keras.layers.Conv2D(6,5,input_shape=(32,32,3)),# 使用6个5*5的卷积核对单通道32*32的图片进行卷积,结果得到6个28*28的特征图tf.keras.layers.MaxPool2D(pool_size=2,strides=2), # 对28*28的特征图进行2*2最大池化,得到14*14的特征图tf.keras.layers.ReLU(),tf.keras.layers.Conv2D(16,5),# 使用16个5*5的卷积核对6通道14*14的图片进行卷积,结果得到16个10*10的特征图tf.keras.layers.MaxPool2D(pool_size=2,strides=2),# 对10*10的特征图进行2*2最大池化,得到5*5的特征图tf.keras.layers.ReLU(),tf.keras.layers.Conv2D(120,5),# 使用120个5*5的卷积核对16通道5*5的图片进行卷积,结果得到120个1*1的特征图tf.keras.layers.ReLU(),#tf.keras.layers.Dropout(0.5),tf.keras.layers.Flatten(),## 将 (None, 1, 1, 120) 的下采样图片拉伸成 (None, 120) 的形状tf.keras.layers.Dense(84,activation='relu'),tf.keras.layers.Dense(10,activation='softmax')
])

网络编译&&训练

model.compile(optimizer= "adam",loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])
history = model.fit(train_db,validation_data=test_db,epochs=epochs
)

实验结果可视化:

实验的准确率不高,在60%左右,而且模型的过拟合现象比较严重。因为是第一代神经网络,有这样的不足很正常。
在原始的LeNet-5网络下加入Dropout层

model = tf.keras.Sequential([tf.keras.layers.Conv2D(6,5,input_shape=(32,32,3)),tf.keras.layers.MaxPool2D(pool_size=2,strides=2),tf.keras.layers.ReLU(),tf.keras.layers.Conv2D(16,5),tf.keras.layers.MaxPool2D(pool_size=2,strides=2),tf.keras.layers.ReLU(),tf.keras.layers.Conv2D(120,5),tf.keras.layers.ReLU(),tf.keras.layers.Dropout(0.5),tf.keras.layers.Flatten(),tf.keras.layers.Dense(84,activation='relu'),tf.keras.layers.Dense(10,activation='softmax')
])

实验结果可视化:

过拟合问题得到了解决,但是模型的准确率还是比较低。
自己搭建CNN网络

model = tf.keras.Sequential([tf.keras.layers.Conv2D(16,3,padding="same",activation="relu",input_shape=(32,32,3)),tf.keras.layers.MaxPool2D(),tf.keras.layers.Conv2D(32,3,padding="same",activation="relu"),tf.keras.layers.MaxPool2D(),tf.keras.layers.Conv2D(64,3,padding="same",activation="relu"),tf.keras.layers.MaxPool2D(),tf.keras.layers.Dropout(0.5),tf.keras.layers.Flatten(),tf.keras.layers.Dense(512,activation="relu"),tf.keras.layers.Dense(10,activation="softmax")
])

实验结果可视化:

过拟合问题得到了改善,模型的准确率得到了提高。

总结:LeNet-5网络对于Cifar10的模型准确率比较低,而且过拟合现象比较严重。在LeNet-5网络中加入Dropout层后,过拟合现象得到了改善,但是模型的准确率还是比较低。博主将epochs由50增加到了100,准确率没有得到提升。由此证明,单纯的增加epochs的次数,并不能很好的改善模型的准确率。利用自己搭建的CNN网络,由于网络的层数增加,模型的准确率得到了提高。

深度学习之基于LeNet-5实现cifar10的识别相关推荐

  1. 深度学习之基于Xception实现四种动物识别

    本次实验类似于猫狗大战,只不过将两种动物识别变为了四种动物识别. 本文的重点是卷积神经网络Xception的实践,在之前的学习中,我们已经实验过其他几种比较常用的网络模型,但是Xception网络并未 ...

  2. 深度学习之基于VGG16与ResNet50实现鸟类识别

    鸟类识别在之前做过,但是效果特别差.而且ResNet50的效果直接差到爆炸,这次利用VGG16与ResNet50的官方模型进行鸟类识别. 1.导入库 import tensorflow as tf i ...

  3. 深度学习之基于opencv和CNN实现人脸识别

    这个项目在之前人工智能课设上做过,但是当时是划水用的别人的.最近自己实现了一下,基本功能可以实现,但是效果并不是很好.容易出现错误识别,或者更改了背景之后识别效果变差的现象.个人以为是数据选取的问题, ...

  4. 深度学习实战—基于TensorFlow 2.0的人工智能开发应用

    作者:辛大奇 著 出版社:中国水利水电出版社 品牌:智博尚书 出版时间:2020-10-01 深度学习实战-基于TensorFlow 2.0的人工智能开发应用

  5. Python深度学习:基于TensorFlow

    作者:吴茂贵,王冬,李涛,杨本法 出版社:机械工业出版社 品牌:机工出版 出版时间:2018-10-01 Python深度学习:基于TensorFlow

  6. Python深度学习:基于PyTorch [Deep Learning with Python and PyTorch]

    作者:吴茂贵,郁明敏,杨本法,李涛,张粤磊 著 出版社:机械工业出版社 品牌:机工出版 出版时间:2019-11-01 Python深度学习:基于PyTorch [Deep Learning with ...

  7. 深度学习入门 基于Python的理论与实现

    作者:斋藤康毅 出版社:人民邮电出版社 品牌:iTuring 出版时间:2018-07-01 深度学习入门 基于Python的理论与实现

  8. 【深度学习】基于Pytorch进行深度神经网络计算(一)

    [深度学习]基于Pytorch进行深度神经网络计算(一) 文章目录 1 层和块 2 自定义块 3 顺序块 4 在正向传播函数中执行代码 5 嵌套块 6 参数管理(不重要) 7 参数初始化(重要) 8 ...

  9. 【深度学习】基于Pytorch进行深度神经网络计算(二)

    [深度学习]基于Pytorch进行深度神经网络计算(二) 文章目录 1 延后初始化 2 Pytorch自定义层2.1 不带参数的层2.2 带参数的层 3 基于Pytorch存取文件 4 torch.n ...

  10. 【深度学习】基于Pytorch的卷积神经网络概念解析和API妙用(一)

    [深度学习]基于Pytorch的卷积神经网络API妙用(一) 文章目录 1 不变性 2 卷积的数学分析 3 通道 4 互相关运算 5 图像中目标的边缘检测 6 基于Pytorch的卷积核 7 特征映射 ...

最新文章

  1. 活动目录系列之三:建立子域和林中第二棵域树
  2. 第十六届全国大学生智能车竞赛竞速组-室内视觉组补充说明
  3. Python之配置日志模块logging
  4. 《高级无线网络—4G技术》——1.3 混合4G无线网络协议
  5. 基于python3的一次简单的请求url接口返回json类型结果实例。
  6. seo技巧-2015/10/05
  7. isnull mysql_mysql isnull用法讲解
  8. 宿松县事业单位计算机基础知识,计算机基础知识试题(事业单位考试)
  9. vc6 前进后退 番茄_比较圣女果与西红柿中的Vc含量解读
  10. 安卓第二阶段实训项目:基于媒体库音乐播放器V1.0
  11. 硬件基础知识----(20)KVM 深入理解
  12. 沧小海笔记之PCIE协议解析——第二章 详述PCIE事务层
  13. 正点原子STM32F103 DMA代码例程魔改
  14. 传奇类手游是怎么做推广的?
  15. 开发电脑用 Windows 还是 Mac
  16. 巨大的市场潜力,细数2019国内云计算新排名
  17. 【程序员讲装修】平台选择第三期
  18. 海思hi3531处理器参数,hi3531芯片详细信息简介
  19. 张良、岳飞、钢铁是怎样炼成的
  20. (转)数据挖掘岗求职经验:腾讯+百度+华为(均拿到sp offer)

热门文章

  1. C#的winform的中委托显示图片
  2. 信息收集——Web目录扫描
  3. python点名代码_基于python tkinter的点名小程序功能的实例代码
  4. python有几个系列_python系列1-就业篇
  5. python写一个app接收摄像头传输的视频_使用Python的Flask框架实现视频的流媒体传输...
  6. oracle行迁移实验,Oracle 行迁移 amp; 行链接的检测与消除
  7. macrotask和microtask以及EventLoop的介绍
  8. 「镁客·请讲」安智汽车郭健:ADAS是一个链条式的系统,每个模块都必须做好...
  9. 简述angular中constant和$filter的用法
  10. 制造机器人的现状和发展趋势