卷积神经网络(二)CIFAR100类别分类

一.数据介绍

总共一百个类,每个类有600个图像。每类500个训练图像,100个测试图像。没填图像都带有一个"精细"标签(它所属的类)核一个粗糙标签(它所属的超类)

二.API使用

用于构建CNN模型的API

Conv2D:实现卷积,kernel_size,strides,padding,datafromat,'NHWC'核'NCHW'

MaxPool2D:池化操作

python 复制代码
import keras
import tensorflow as tf

# 构建卷积层,filters:多少个卷积核,kernel_size每个卷积核为5*5大小
# strides:步长,padding:零填充大小为same形式,activation:使用什么激活函数
keras.layers.Conv2D(filters=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')

三:代码实现

1.读取数据集

python 复制代码
class CNNMnist():
    def __init__(self):
        # 读取数据
        (self.train,self.train_label),(self.test,self.test_label)=keras.datasets.cifar100.load_data()
        # 数据转换为32*32大小的3通道数据,并对数据归一化
        self.train=self.train.reshape(-1,32,32,3)/255.0
        self.test=self.train.reshape(-1,32,32,3)/255.0

2.进行模型编写

1.结构设计

两层卷积层+两层神经网络

第一层:卷积核大小5*5形式的32个,步长为1,零填充为same形式,激活函数为relu,池化为大小2*2步长为2

第二层:卷积核大小5*5形式的64个,步长为1,零填充为same形式,激活函数为relu,池化为大小2*2步长为2

经过每一层图片数据大小的变化需要确定,导入的数据中每批次若干图片数据大小为None,32\*32,如果要经过卷积计算,需要变成None,32,32,3

2.数据变化

第一层:

卷积前-卷积后=None,32,32,3-None,32,32,32,因为外面卷积核里设置的fiter为32个,所以卷积后会生成32个特征图。激活函数过后:None,32,32,32-None,32,32,32

池化后:None,32,32,32-None,16,16,32,因为外面池化设置的poll_size核strides都是2

第二层:

卷积前-卷积后=None,16,16,32-None,16,16,64。激活函数过后:None,16,16,64-None,16,16,64

池化后:None,16,16,64-None,8,8,64,因为外面池化设置的poll_size核strides都是2

全连接层:

传入全连接层的数据形式为:None,8,8,64,因为是全连接所以变化后还是None,8,8,64,经过第一层神经网络后:None,8,8,64*None,8,8,64=None,1024,然后到输出层的时候None,1024*1024,100=None,100

python 复制代码
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),
    ])

定义模型参数

训练模型

模型评估

这些在上几章说过了

完整代码

python 复制代码
from tensorflow import keras
import tensorflow as tf

class CNNMnist():
    # 建立模型
    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 __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.train.reshape(-1,32,32,3)/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.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()


    print(CNNMnist.model.summary())

都看到这里了,点个赞把!!!

相关推荐
小猴子爱上树4 分钟前
跨境电商翻译工具推荐:批量图片翻译、视频字幕翻译、智能抠图一站式搞定
人工智能·python·音视频
冬奇Lab18 分钟前
Code Agent 解剖(14):Harness 设计之四——容错与恢复
人工智能·开源
冬奇Lab22 分钟前
一天一个开源项目(第202篇):Needle 2 - 14MB 的端侧工具调用模型
人工智能·开源·资讯
林澈在路上29 分钟前
AI翻唱软件哪个好 2026国产AI写歌工具对比推荐
大数据·人工智能·深度学习·github·aigc·音视频·音频
咖啡星人k32 分钟前
2026 MCP 模型上下文协议:让 AI 自己动手接工具,告别手写接口(MonkeyCode 实战)
人工智能·深度学习·机器学习·语言模型·自然语言处理
yyuuuzz1 小时前
记一次 VPS 性能排查:共享 CPU 突发额度导致的限流
运维·服务器·人工智能
恋猫de小郭1 小时前
看懂大模型架构术语,帮助你理解目前常见的大模型开源架构
前端·人工智能·ai编程
tachibana21 小时前
复杂任务怎么做的任务拆分?
人工智能·ai·大模型·llm·agent
tachibana21 小时前
ReAct、Plan-and-Execute、Reflection 三种范式有什么核心区别
人工智能·ai·大模型·llm·agent
————A1 小时前
Agent 接收用户上传文件
人工智能·笔记·python·状态模式