深度学习之基于LeNet-5实现cifar10的识别
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的识别相关推荐
- 深度学习之基于Xception实现四种动物识别
本次实验类似于猫狗大战,只不过将两种动物识别变为了四种动物识别. 本文的重点是卷积神经网络Xception的实践,在之前的学习中,我们已经实验过其他几种比较常用的网络模型,但是Xception网络并未 ...
- 深度学习之基于VGG16与ResNet50实现鸟类识别
鸟类识别在之前做过,但是效果特别差.而且ResNet50的效果直接差到爆炸,这次利用VGG16与ResNet50的官方模型进行鸟类识别. 1.导入库 import tensorflow as tf i ...
- 深度学习之基于opencv和CNN实现人脸识别
这个项目在之前人工智能课设上做过,但是当时是划水用的别人的.最近自己实现了一下,基本功能可以实现,但是效果并不是很好.容易出现错误识别,或者更改了背景之后识别效果变差的现象.个人以为是数据选取的问题, ...
- 深度学习实战—基于TensorFlow 2.0的人工智能开发应用
作者:辛大奇 著 出版社:中国水利水电出版社 品牌:智博尚书 出版时间:2020-10-01 深度学习实战-基于TensorFlow 2.0的人工智能开发应用
- Python深度学习:基于TensorFlow
作者:吴茂贵,王冬,李涛,杨本法 出版社:机械工业出版社 品牌:机工出版 出版时间:2018-10-01 Python深度学习:基于TensorFlow
- Python深度学习:基于PyTorch [Deep Learning with Python and PyTorch]
作者:吴茂贵,郁明敏,杨本法,李涛,张粤磊 著 出版社:机械工业出版社 品牌:机工出版 出版时间:2019-11-01 Python深度学习:基于PyTorch [Deep Learning with ...
- 深度学习入门 基于Python的理论与实现
作者:斋藤康毅 出版社:人民邮电出版社 品牌:iTuring 出版时间:2018-07-01 深度学习入门 基于Python的理论与实现
- 【深度学习】基于Pytorch进行深度神经网络计算(一)
[深度学习]基于Pytorch进行深度神经网络计算(一) 文章目录 1 层和块 2 自定义块 3 顺序块 4 在正向传播函数中执行代码 5 嵌套块 6 参数管理(不重要) 7 参数初始化(重要) 8 ...
- 【深度学习】基于Pytorch进行深度神经网络计算(二)
[深度学习]基于Pytorch进行深度神经网络计算(二) 文章目录 1 延后初始化 2 Pytorch自定义层2.1 不带参数的层2.2 带参数的层 3 基于Pytorch存取文件 4 torch.n ...
- 【深度学习】基于Pytorch的卷积神经网络概念解析和API妙用(一)
[深度学习]基于Pytorch的卷积神经网络API妙用(一) 文章目录 1 不变性 2 卷积的数学分析 3 通道 4 互相关运算 5 图像中目标的边缘检测 6 基于Pytorch的卷积核 7 特征映射 ...
最新文章
- 活动目录系列之三:建立子域和林中第二棵域树
- 第十六届全国大学生智能车竞赛竞速组-室内视觉组补充说明
- Python之配置日志模块logging
- 《高级无线网络—4G技术》——1.3 混合4G无线网络协议
- 基于python3的一次简单的请求url接口返回json类型结果实例。
- seo技巧-2015/10/05
- isnull mysql_mysql isnull用法讲解
- 宿松县事业单位计算机基础知识,计算机基础知识试题(事业单位考试)
- vc6 前进后退 番茄_比较圣女果与西红柿中的Vc含量解读
- 安卓第二阶段实训项目:基于媒体库音乐播放器V1.0
- 硬件基础知识----(20)KVM 深入理解
- 沧小海笔记之PCIE协议解析——第二章 详述PCIE事务层
- 正点原子STM32F103 DMA代码例程魔改
- 传奇类手游是怎么做推广的?
- 开发电脑用 Windows 还是 Mac
- 巨大的市场潜力,细数2019国内云计算新排名
- 【程序员讲装修】平台选择第三期
- 海思hi3531处理器参数,hi3531芯片详细信息简介
- 张良、岳飞、钢铁是怎样炼成的
- (转)数据挖掘岗求职经验:腾讯+百度+华为(均拿到sp offer)
热门文章
- C#的winform的中委托显示图片
- 信息收集——Web目录扫描
- python点名代码_基于python tkinter的点名小程序功能的实例代码
- python有几个系列_python系列1-就业篇
- python写一个app接收摄像头传输的视频_使用Python的Flask框架实现视频的流媒体传输...
- oracle行迁移实验,Oracle 行迁移 amp; 行链接的检测与消除
- macrotask和microtask以及EventLoop的介绍
- 「镁客·请讲」安智汽车郭健:ADAS是一个链条式的系统,每个模块都必须做好...
- 简述angular中constant和$filter的用法
- 制造机器人的现状和发展趋势