卷积神经网络(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, 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, 8, 8, 64]——>[None, 8 64]
    • [None, 8 64] x [8 64, 1024] = [None, 1024]
    • [None,1024] x [1024, 100]——>[None, 100]
    • 权重数量:[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类别分类相关推荐

  1. 【飞桨】卷积神经网络(CNN)实现猫狗分类

    目录 什么是卷积神经网络? 一.数据准备 二.网络配置 1. 定义网络 2. 定义输入数据的格式 3. 定义损失函数和准确率 4. 定义优化方法 三.模型训练&评估 四.模型预测 五.完整代码 ...

  2. 【TensorFlowKeras】基于卷积神经网络CNN的猫狗分类

    文章目录 一.猫狗数据集 二.构建网络 三.基准模型调整 四.使用VGG19实现猫狗分类 五.参考

  3. 文本分类(下) | 卷积神经网络(CNN)在文本分类上的应用

    正文共3758张图,4张图,预计阅读时间18分钟. 1.简介 原先写过两篇文章,分别介绍了传统机器学习方法在文本分类上的应用以及CNN原理,然后本篇文章结合两篇论文展开,主要讲述下CNN在文本分类上的 ...

  4. 基于卷积神经网络CNN的水果分类预测,卷积神经网络水果等级识别

    目录 背影 卷积神经网络CNN的原理 卷积神经网络CNN的定义 卷积神经网络CNN的神经元 卷积神经网络CNN的激活函数 卷积神经网络CNN的传递函数 卷积神经网络CNN水果分类预测 基本结构 主要参 ...

  5. keras中文文档_【DL项目实战02】图像识别分类——Keras框架+卷积神经网络CNN(使用VGGNet)

    版权声明:小博主水平有限,希望大家多多指导. 目录: [使用传统DNN] BG大龍:[DL项目实战02]图像分类--Keras框架+使用传统神经网络DNN​zhuanlan.zhihu.com [使用 ...

  6. [人工智能-深度学习-33]:卷积神经网络CNN - 常见分类网络- LeNet网络结构分析与详解

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

  7. 基于卷积神经网络CNN的甘蔗芽体自动识别,卷积神经网络分类预测

    目录 背影 卷积神经网络CNN的原理 卷积神经网络CNN的定义 卷积神经网络CNN的神经元 卷积神经网络CNN的激活函数 卷积神经网络CNN的传递函数 卷积神经网络CNN甘蔗芽体自动识别 基本结构 主 ...

  8. 卷积神经网络CNN(Convolutional Neural Network)原理与代码实现 Le-Net5

    图像识别经典数据集: 图像识别是人工智能的一个重要的领域.其他常用的图像识别数据集: CIFAR:  http://www.cs.toronto.edu/~kriz/cifar.html CIFAR数 ...

  9. 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-03-基于Python的LeNet之LR

    原地址可以查看更多信息 本文主要参考于:Classifying MNIST digits using Logistic Regression  python源代码(GitHub下载 CSDN免费下载) ...

最新文章

  1. 【Linux】ubuntu系统VMware Tools(文件共享、全屏...)3步完成安装过程亲测可用
  2. 也玩有道难题的双立方数问题:Python 版解法
  3. CodeBlocks 汉化教程及多语言
  4. EFCore3.1+编写自定义的EF.Functions扩展方法
  5. Linux多命令协作:管道及重定向
  6. 数控铣削图案及编程_数控铣加工比普铣的优势,大多数人选择数控铣的原因
  7. Centos7安装maven过程
  8. AmS中的一些重要调度相关变量
  9. Atitit it与互联网 的技术体系 目录 1. 概念范围 硬件 软件 应用 1 1.1. 职业分类 2 1.1.1. 软件类 2 1.1.2. 硬件类 2 1.1.3. 网络类 2 1.1.4.
  10. .NET 类、网站dll反编译工具
  11. Effective Java 经典学习(一)
  12. HostGator 評價 – 優異的運行時間與支持一鍵安裝 WordPress,內含 4 折 60% 折扣優惠購買連結! - TechMoon 科技月球...
  13. 如何将多sheet Excel 导入到超级表格中
  14. 内核层读写应用层文件,使用filp_open函数——完美
  15. 何时“大庇天下寒士俱欢颜”(附笑话)
  16. 十三五期间,北京智慧交通建设内容有哪些?怎么建?
  17. 淘宝视频的跨模态检索
  18. RAD Studio/Delphi 2010 3615下载+破解
  19. 学习日记——ESP8266程序下载(2020.5.11)
  20. 有效减少虚拟机镜像文件的大小

热门文章

  1. 百万美元技术大奖,雷军颁给了秒充和隐私保护技术团队
  2. 用AI加速物联网落地,安富利的客户洞察和解决之道
  3. 抛弃VS Code,我还能用啥编辑器?| 技术头条
  4. 2018年最后几天学什么?给你关注度最高的10篇文章
  5. 通俗理解PCA降维作用
  6. AI量身定制:如何打造符合“中国特色教育”的内容推荐体系?
  7. AI一分钟 | 刚爆Python将进入高考,AI就已强势进入公务员国考试卷;报告称1/4男性更喜欢跟机器人谈恋爱,真的吗?
  8. 观点 | 李开复谈AI创业的“风口”和“泡沫”
  9. 从MySQL 5.6升级到8.0,Facebook付出了惨痛代价……
  10. Spring官方为什么建议构造器注入?