卷积神经网络(CNN)实现CIFAR100类别分类
卷积神经网络(CNN)实现CIFAR100类别分类
1. CIFAR100数据集介绍
这个数据集就像CIFAR-10,除了它有100个类,每个类包含600个图像。,每类各有500个训练图像和100个测试图像。CIFAR-100中的100个类被分成20个超类。每个图像都带有一个“精细”标签(它所属的类)和一个“粗糙”标签(它所属的超类) 以下是CIFAR-100中的类别列表:
等等...
2. API 使用
- 用于构建CNN模型的API
- Conv2D:实现卷积,kernel_size,strides,padding,dataformat,'NHWC'和'NCHW'
- MaxPool2D:池化操作
keras.layers.Conv2D(32, kernel_size=5, strides=1,padding='same', data_format='channels_last', activation=tf.nn.relu),keras.layers.MaxPool2D(pool_size=2, strides=2, padding='same'),
【在池化层写入padding='same'不起作用,不会保留原来的大小,仍然会根据前面的pool_size和stride改变之前形状的大小】
3. 步骤分析以及代码实现(缩减版LeNet5)
- 读取数据集:
- 从datasets中获取相应的数据集,直接有训练集和测试集
- 需要进行形状处理以及归一化
class CNNMnist(object):def __init__(self):(self.train, self.train_label), (self.test, self.test_label) = \keras.datasets.cifar100.load_data()self.train = self.train.reshape(-1, 32, 32, 3) / 255.0self.test = self.test.reshape(-1, 32, 32, 3) / 255.0
进行模型编写
- 两层卷积层+两个神经网络层
- 网络设计:
第一层
- 卷积:32个filter、大小5*5、strides=1、padding="SAME"
- 激活:Relu
- 池化:大小2x2、strides2
- 第二层
- 卷积:64个filter、大小5*5、strides=1、padding="SAME"
- 激活:Relu
- 池化:大小2x2、strides2
- 全连接层
经过每一层图片数据大小的变化需要确定,CIFAR100输入的每批次若干图片数据大小为[None, 32 * 32],如果要进过卷积计算,需要变成[None, 32, 32, 3]
- 第一层
- 卷积:[None, 32, 32, 3]———>[None, 32, 32, 32]
- 权重数量:[5, 5, 3 ,32]
- 偏置数量:[32]
- 激活:[None, 32, 32, 32]———>[None, 32, 32, 32]
- 池化:[None, 32, 32, 32]———>[None, 16, 16, 32]
- 卷积:[None, 32, 32, 3]———>[None, 32, 32, 32]
- 第二层
- 卷积:[None, 16, 16, 32]———>[None, 16, 16, 64]
- 权重数量:[5, 5, 32 ,64]
- 偏置数量:[64]
- 激活:[None, 16, 16, 64]———>[None, 16, 16, 64]
- 池化:[None, 16, 16, 64]———>[None, 8, 8, 64]
- 卷积:[None, 16, 16, 32]———>[None, 16, 16, 64]
- 全连接层
- [None, 8, 8, 64]——>[None, 8 8 64]
- [None, 8 8 64] x [8 8 64, 1024] = [None, 1024]
- [None,1024] x [1024, 100]——>[None, 100]
- 权重数量:[8 8 64, 1024] + [1024, 100],由分类别数而定
- 偏置数量:[1024] + [100],由分类别数而定
model = keras.Sequential([keras.layers.Conv2D(32, kernel_size=5, strides=1,padding='same', data_format='channels_last', activation=tf.nn.relu),keras.layers.MaxPool2D(pool_size=2, strides=2, padding='same'),keras.layers.Conv2D(64, kernel_size=5, strides=1,padding='same', data_format='channels_last', activation=tf.nn.relu),keras.layers.MaxPool2D(pool_size=2, strides=2, padding='same'),keras.layers.Flatten(),keras.layers.Dense(1024, activation=tf.nn.relu),keras.layers.Dense(100, activation=tf.nn.softmax),])
- 其它完整代码
def compile(self):CNNMnist.model.compile(optimizer=keras.optimizers.Adam(),loss=tf.keras.losses.sparse_categorical_crossentropy,metrics=['accuracy'])return Nonedef fit(self):CNNMnist.model.fit(self.train, self.train_label, epochs=1, batch_size=32)return Nonedef evaluate(self):test_loss, test_acc = CNNMnist.model.evaluate(self.test, self.test_label)print(test_loss, test_acc)return Noneif __name__ == '__main__':cnn = CNNMnist()cnn.compile()cnn.fit()cnn.predict()print(CNNMnist.model.summary())
全部示例代码:
import tensorflow as tf
from tensorflow.python.keras.datasets import cifar100
from tensorflow.python.keras.models import Sequential
from keras import losses, optimizers
from tensorflow.python.keras.layers import Flatten, Conv2D, MaxPool2D, Denseclass CNNMnist(object):"""使用卷积神经网络实现CIFAR100类别分类"""# 编写两层+两层全连接层网络模型model = Sequential([# 卷积层1:32个 5*5*3的filter,strides=1,padding="same"Conv2D(32, kernel_size=5, strides=1, padding="same", data_format="channels_last", activation=tf.nn.relu),# 池化层:2*2窗口,strides=2MaxPool2D(pool_size=2, strides=2, padding='same'),# 卷积层2:64个,5*5*32的filter,strides=1,padding="same"Conv2D(64, kernel_size=5, strides=1, padding='same', data_format='channels_last', activation=tf.nn.relu),# 池化层2:2*2窗口,strides=2,[None, 8,8,64]MaxPool2D(pool_size=2, strides=2, padding='same'),# [None,8,8,64] --- > [None, 8*8*64]Flatten(), # 会有默认值的# 全连接层神经网络# 1024个神经元网络层Dense(1024, activation=tf.nn.relu),# 100个神经元神经网络Dense(100, activation=tf.nn.softmax)])def __init__(self):# 获取训练测试数据(self.x_train, self.y_train), (self.x_test, self.y_test) = cifar100.load_data()print(self.x_train.shape)print(self.x_test.shape)print(self.y_train.shape)print(self.y_test.shape)# 进行数据归一化self.x_train = self.x_train / 255.0self.x_test = self.x_test / 255.0def compile(self):CNNMnist.model.compile(optimizer=optimizers.Adam(), loss=losses.sparse_categorical_crossentropy, metrics=['accuracy'])return Nonedef fit(self):CNNMnist.model.fit(self.x_train, self.y_train, epochs=1, batch_size=32)return Nonedef evaluate(self):test_loss, test_acc = CNNMnist.model.evaluate(self.x_test, self.y_test)print(test_loss, test_acc)return Noneif __name__ == '__main__':cnn = CNNMnist()cnn.compile()cnn.fit()cnn.evaluate()
运行结果:
(50000, 32, 32, 3)
(10000, 32, 32, 3)
(50000, 1)
(10000, 1)
1563/1563 [==============================] - 67s 43ms/step - loss: 3.5395 - accuracy: 0.1694
313/313 [==============================] - 3s 9ms/step - loss: 2.9754 - accuracy: 0.2700
2.9753782749176025 0.27000001072883606
卷积神经网络(CNN)实现CIFAR100类别分类相关推荐
- 【飞桨】卷积神经网络(CNN)实现猫狗分类
目录 什么是卷积神经网络? 一.数据准备 二.网络配置 1. 定义网络 2. 定义输入数据的格式 3. 定义损失函数和准确率 4. 定义优化方法 三.模型训练&评估 四.模型预测 五.完整代码 ...
- 【TensorFlowKeras】基于卷积神经网络CNN的猫狗分类
文章目录 一.猫狗数据集 二.构建网络 三.基准模型调整 四.使用VGG19实现猫狗分类 五.参考
- 文本分类(下) | 卷积神经网络(CNN)在文本分类上的应用
正文共3758张图,4张图,预计阅读时间18分钟. 1.简介 原先写过两篇文章,分别介绍了传统机器学习方法在文本分类上的应用以及CNN原理,然后本篇文章结合两篇论文展开,主要讲述下CNN在文本分类上的 ...
- 基于卷积神经网络CNN的水果分类预测,卷积神经网络水果等级识别
目录 背影 卷积神经网络CNN的原理 卷积神经网络CNN的定义 卷积神经网络CNN的神经元 卷积神经网络CNN的激活函数 卷积神经网络CNN的传递函数 卷积神经网络CNN水果分类预测 基本结构 主要参 ...
- keras中文文档_【DL项目实战02】图像识别分类——Keras框架+卷积神经网络CNN(使用VGGNet)
版权声明:小博主水平有限,希望大家多多指导. 目录: [使用传统DNN] BG大龍:[DL项目实战02]图像分类--Keras框架+使用传统神经网络DNNzhuanlan.zhihu.com [使用 ...
- [人工智能-深度学习-33]:卷积神经网络CNN - 常见分类网络- LeNet网络结构分析与详解
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...
- 基于卷积神经网络CNN的甘蔗芽体自动识别,卷积神经网络分类预测
目录 背影 卷积神经网络CNN的原理 卷积神经网络CNN的定义 卷积神经网络CNN的神经元 卷积神经网络CNN的激活函数 卷积神经网络CNN的传递函数 卷积神经网络CNN甘蔗芽体自动识别 基本结构 主 ...
- 卷积神经网络CNN(Convolutional Neural Network)原理与代码实现 Le-Net5
图像识别经典数据集: 图像识别是人工智能的一个重要的领域.其他常用的图像识别数据集: CIFAR: http://www.cs.toronto.edu/~kriz/cifar.html CIFAR数 ...
- 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-03-基于Python的LeNet之LR
原地址可以查看更多信息 本文主要参考于:Classifying MNIST digits using Logistic Regression python源代码(GitHub下载 CSDN免费下载) ...
最新文章
- 【Linux】ubuntu系统VMware Tools(文件共享、全屏...)3步完成安装过程亲测可用
- 也玩有道难题的双立方数问题:Python 版解法
- CodeBlocks 汉化教程及多语言
- EFCore3.1+编写自定义的EF.Functions扩展方法
- Linux多命令协作:管道及重定向
- 数控铣削图案及编程_数控铣加工比普铣的优势,大多数人选择数控铣的原因
- Centos7安装maven过程
- AmS中的一些重要调度相关变量
- Atitit it与互联网 的技术体系 目录 1. 概念范围 硬件 软件 应用	1 1.1. 职业分类	2 1.1.1. 软件类	2 1.1.2. 硬件类	2 1.1.3. 网络类	2 1.1.4.
- .NET 类、网站dll反编译工具
- Effective Java 经典学习(一)
- HostGator 評價 – 優異的運行時間與支持一鍵安裝 WordPress,內含 4 折 60% 折扣優惠購買連結! - TechMoon 科技月球...
- 如何将多sheet Excel 导入到超级表格中
- 内核层读写应用层文件,使用filp_open函数——完美
- 何时“大庇天下寒士俱欢颜”(附笑话)
- 十三五期间,北京智慧交通建设内容有哪些?怎么建?
- 淘宝视频的跨模态检索
- RAD Studio/Delphi 2010 3615下载+破解
- 学习日记——ESP8266程序下载(2020.5.11)
- 有效减少虚拟机镜像文件的大小
热门文章
- 百万美元技术大奖,雷军颁给了秒充和隐私保护技术团队
- 用AI加速物联网落地,安富利的客户洞察和解决之道
- 抛弃VS Code,我还能用啥编辑器?| 技术头条
- 2018年最后几天学什么?给你关注度最高的10篇文章
- 通俗理解PCA降维作用
- AI量身定制:如何打造符合“中国特色教育”的内容推荐体系?
- AI一分钟 | 刚爆Python将进入高考,AI就已强势进入公务员国考试卷;报告称1/4男性更喜欢跟机器人谈恋爱,真的吗?
- 观点 | 李开复谈AI创业的“风口”和“泡沫”
- 从MySQL 5.6升级到8.0,Facebook付出了惨痛代价……
- Spring官方为什么建议构造器注入?