深度学习实战keras构建cnn神经网络完成cifar100类别分类(代码片段)

ZSYL ZSYL     2022-12-21     280

关键词:

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'),

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.0
        self.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, 1 ,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 * 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 None

    def fit(self):

        CNNMnist.model.fit(self.train, self.train_label, epochs=1, batch_size=32)

        return None

    def evaluate(self):

        test_loss, test_acc = CNNMnist.model.evaluate(self.test, self.test_label)

        print(test_loss, test_acc)
        return None


if __name__ == '__main__':

    cnn = CNNMnist()

    cnn.compile()

    cnn.fit()

    cnn.predict()

    print(CNNMnist.model.summary())
  • 训练效果
epoch 1:
......
43168/50000 [========================>.....] - ETA: 35s - loss: 3.6360 - acc: 0.1547
43200/50000 [========================>.....] - ETA: 35s - loss: 3.6354 - acc: 0.1547
43232/50000 [========================>.....] - ETA: 35s - loss: 3.6352 - acc: 0.1548
43264/50000 [========================>.....] - ETA: 34s - loss: 3.6348 - acc: 0.1549
43296/50000 [========================>.....] - ETA: 34s - loss: 3.6346 - acc: 0.1549

4. 完整代码

"""卷积神经网络案例实现"""
from tensorflow.python.keras.datasets import cifar100
from tensorflow.python import keras
import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
# 1. 读取数据集
# 2. 编写两层+两层全连接网络模型
# 3. 编译、训练、评估

class CNNMnist(object):
    # 2. 编写两层+两层全连接网络模型(类属性)
    model = keras.models.Sequential([
        # 卷积层1:32个5*5*3的filter,strides=1,padding='same'
        keras.layers.Conv2D(32, kernel_size=5, strides=1, padding='same',
                            data_format='channels_last', activation=tf.nn.relu,
                            kernel_regularizer=keras.regularizers.l2(0.01)),
        # 池化层1:2*2窗口,strides=2
        keras.layers.MaxPool2D(pool_size=2, strides=2, padding='same'),
        # 卷积层2:64个5*5*32的filter,strides=1,padding='same'
        keras.layers.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]
        keras.layers.MaxPool2D(pool_size=2, strides=2, padding='same'),
        # [None, 8, 8, 64] ----> [None, 8*8*64]
        keras.layers.Flatten(),  # 高维数组转低维:input_shape
        # 全连接层神经网络
        # 1024个神经网络层
        keras.layers.Dense(1024, activation=tf.nn.relu),
        # 100个神经元神经网络
        keras.layers.Dense(100, activation=tf.nn.softmax)
    ])

    def __init__(self):
        # 获取训练测试数据
        (self.x_train, self.y_train), (self.x_test, self.y_test) = cifar100.load_data()

        # 进行数据归一化
        self.x_train = self.x_train / 255.0
        self.x_test = self.x_test / 255.0

    def compile(self):
        CNNMnist.model.compile(optimizer=keras.optimizers.Adam(),
                         loss=keras.losses.sparse_categorical_crossentropy,
                         metrics=['accuracy'],)
        return None

    def fit(self):
        CNNMnist.model.fit(self.x_train, self.y_train, epochs=1, batch_size=32)

        return None

    def evaluate(self):
        test_loss, test_acc = CNNMnist.model.evaluate(self.x_test, self.y_test)

        print(test_loss, test_acc)

        return None
        

if __name__ == '__main__':
    cnn = CNNMnist()

    cnn.compile()

    cnn.fit()

    print(cnn.model.summary())  # 打印网络的形状,每一层数量等信息

加油!

感谢!

努力!

keras深度学习实战——使用循环神经网络构建情感分析模型(代码片段)

Keras深度学习实战——使用循环神经网络构建情感分析模型0.前言1.使用循环神经网络构建情感分析模型1.1数据集分析1.2构建RNN模型进行情感分析相关链接0.前言在《循环神经详解与实现》一节中,我们已经了解循环神经网络(Recurr... 查看详情

基于cnn卷积神经网络的tensorflow+keras深度学习的人脸识别(代码片段)

基于CNN卷积神经网络的TensorFlow+Keras深度学习的人脸识别前言项目实现效果补充模型数据嵌入模型CNN神经网络模型项目概述项目运行流程核心环境配置项目核心代码详解目录核心代码设置数据集目录收集人脸识别数据——UUID格... 查看详情

keras深度学习实战——使用长短时记忆网络构建情感分析模型(代码片段)

...行情感分类相关链接0.前言我们已经学习了如何使用循环神经网络(Recurrentneuralnetworks,RNN)构建情感分析模型,为了将循环神经网络与长短时记忆网络(LongShortTermMemory,LSTM)的性能进行对 查看详情

keras深度学习实战——使用循环神经网络构建情感分析模型(代码片段)

Keras深度学习实战——使用循环神经网络构建情感分析模型0.前言1.使用循环神经网络构建情感分析模型1.1数据集分析1.2构建RNN模型进行情感分析相关链接0.前言在《循环神经详解与实现》一节中,我们已经了解循环神经网络(R... 查看详情

keras深度学习实战(10)——迁移学习(代码片段)

...模型2.3错误分类的图片示例小结系列链接0.前言在《卷积神经网络的局限性》中,我们看到从零开始训练卷积神经网络(ConvolutionalNeuralNetwork,CNN)模 查看详情

[python人工智能]三十.keras深度学习构建cnn识别阿拉伯手写文字图像(代码片段)

从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前一篇文章分享了生成对抗网络GAN的基础知识,包括什么是GAN、常用算法(CGAN、DCGAN、infoGAN、WGAN)、发展历程、预备知识,并通过... 查看详情

keras深度学习实战——使用fasttext模型构建单词向量(代码片段)

...向量相关链接0.前言fastText是另一种用于生成单词向量的神经网络模型,其将每个单词视为最小单位,学习其向量表示形式,用于解决由于单词的不同时态和形式造成无法准确获取其向量的问题。本节中 查看详情

keras深度学习实战——使用keras构建神经网络(代码片段)

Keras深度学习实战(2)——使用Keras构建神经网络0前言1.Keras简介与安装2.Keras构建神经网络初体验3.训练香草神经网络3.1香草神经网络与MNIST数据集介绍3.2训练神经网络步骤回顾3.3使用Keras构建神经网络模型3.4关键步骤总结... 查看详情

keras深度学习实战——使用fasttext模型构建单词向量(代码片段)

...向量相关链接0.前言fastText是另一种用于生成单词向量的神经网络模型,其将每个单词视为最小单位,学习其向量表示形式,用于解决由于单词的不同时态 查看详情

keras深度学习实战(24)——从零开始构建单词向量(代码片段)

...单词向量0.前言1.单词向量1.1Word2Vec原理1.2构建单词向量1.3神经网络架构2.使用Keras从零开始构建单词向量3.测量单词向量之间的相似度小结系列链接0.前言在解决文本相关问题时,传统方法通常需要对单词进行独热编码。但是,如... 查看详情

keras深度学习实战(26)——文档向量详解(代码片段)

...实战(26)——文档向量详解0.前言1.文档向量基本概念2.神经网络模型与数据集分析2.1模型分析2.2数据集介绍3.利用Keras构建神经网络模型生成文档向量小结系列链接0.前言在《从零开始构建单词向量》一节中,我们学习了单词向... 查看详情

keras深度学习实战(28)——利用单词向量构建情感分析模型(代码片段)

...言在获取单词向量的相关博文中,我们学习了多种不同的神经网络模型用于生成单词向量。在本节中,我们将进一步利用获取到的单词向量,学习如何构建情感分类器分析给定的文本。1.模型与数据集分析1 查看详情

keras深度学习实战(24)——从零开始构建单词向量(代码片段)

...单词向量0.前言1.单词向量1.1Word2Vec原理1.2构建单词向量1.3神经网络架构2.使用Keras从零开始构建单词向量3.测量单词向量之间的相似度小结系列链接0.前言在解决文本相关问题时,传统方法通常需要对单词进行独热编码。但是&#... 查看详情

keras深度学习实战——卷积神经网络的局限性(代码片段)

Keras深度学习实战(9)——卷积神经网络的局限性0.前言1.卷积神经网络的局限性2.情景1——训练数据集图像尺寸较大3.情景2——训练数据集图像尺寸较小4.情景3——在训练尺寸较大的图像时使用更大池化小结系列链接0.... 查看详情

深度学习时间序列预测:卷积神经网络(cnn)算法构建单变量时间序列预测模型预测空气质量(pm2.5)+代码实战

深度学习时间序列预测:卷积神经网络(CNN)算法构建单变量时间序列预测模型预测空气质量(PM2.5)+代码实战神经网络(neualnetworks)是人工智能研究领域的一部分,当前最流行的神经网络是深度卷积神经网络(deepconvolutionalneuralnet... 查看详情

keras深度学习实战(19)——使用对抗攻击生成可欺骗神经网络的图像(代码片段)

...深度学习实战(19)——使用对抗攻击生成可欺骗神经网络的图像0.前言1.对抗攻击简介2.对抗攻击模型分析2.1模型识别图像流程2.2对抗攻击流程3.使用Keras实现对抗攻击小结系列链接0.前言近年来,深度学习在图像分类... 查看详情

keras深度学习实战(30)——使用文本生成模型进行文学创作(代码片段)

...构建与训练小结系列链接0.前言在情感分类任务中,神经网络模型的预测结果离散事件,即情感类别(正面、负面或中立),这属于多对一架构(多个输入计算得到一个输出) 查看详情

keras深度学习实战——使用glove模型构建单词向量(代码片段)

Keras深度学习实战——使用GloVe模型构建单词向量0.前言1.GloVe算法模型1.1模型目标1.2GloVe算法计算细节3.实现GloVe模型构建单词向量3.1数据集3.2模型实现相关链接0.前言在《使用fastText模型构建单词向量》一节中,我们学习了如何构... 查看详情