CNN模型识别cifar数据集

简介: 构建简单的CNN模型识别cifar数据集。经过几天的简单学习,尝试写了一个简单的CNN模型通过cifar数据集进行训练。效果一般,测试集上的的表现并不好,说明模型的构建不怎么样。# -*- coding = utf-8 -*-# @Time : 2020/10/16 16:19# @Author : tcc# @File : cifar_test.py# @Software : pycha...

构建简单的CNN模型识别cifar数据集。

经过几天的简单学习,尝试写了一个简单的CNN模型通过cifar数据集进行训练。效果一般,测试集上的的表现并不好,说明模型的构建不怎么样。

# -*- coding = utf-8 -*-
# @Time : 2020/10/16 16:19
# @Author : tcc
# @File : cifar_test.py
# @Software : pycharm

# 使用cnn模型训练识别cafir数据集


import keras
# 引入数据集
from keras.datasets import cifar10
# 反序列化和序列化
import pickle
# 主要用于获取文件的属性
import os
from keras.preprocessing.image import ImageDataGenerator
# 序列模型
from keras.models import Sequential
# 引入全连接层,dropout 层,flatten 层,展开层
from keras.layers import Dense, Dropout, Activation, Flatten
# 卷积层,池化层
from keras.layers import Conv2D, MaxPooling2D
# 引入numpy矩阵运算
import numpy as np
# 加载模型模块
from keras.models import load_model


# 文件读取,打开本地文件读取数据集数据
def open_file_data():
    pass


# 1.本地加载数据集
def load_dataset_data():
    # 加载训练集50000张32x32的rgb图片,测试集1000032x32的rgb图片
    (x_train, y_train), (x_test, y_test) = cifar10.load_data()
    return (x_train, y_train), (x_test, y_test)


# 2.归一化(规范化)数据
def standard_data(x, y, x_, y_):
    x = x / 255
    x_ = x_ / 255
    # keras.utils.to_categorical将整型标签转为one_hot。y为int数组,num_classes为标签类别总数,大于max(y)(标签从0开始的)。
    y = keras.utils.to_categorical(y, 10)
    y_ = keras.utils.to_categorical(y_, 10)
    return x, y, x_, y_


# ..图片的可视化
def show_data(x):
    import matplotlib.pyplot as plt
    plt.imshow(x[0])
    plt.show()
    plt.imshow(x[1])
    plt.show()


# 将 RGB 图像转为灰度图
def rgb2gray(img):
    # Y' = 0.299 R + 0.587 G + 0.114 B
    # https://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale
    return np.dot(img[..., :3], [0.299, 0.587, 0.114])


# 3.构建CNN模型
def make_model():
    # 声明序贯模型
    model = Sequential()
    # 卷积层,32个3x3的卷积核,输入为32x32大小,通道数3的图像,边框填充,激活函数relu
    model.add(Conv2D(filters=32, kernel_size=(3, 3), activation='relu', input_shape=(32, 32, 3), padding='same'))
    # 卷积层,32个3x3的卷积核
    model.add(Conv2D(filters=32, kernel_size=(3, 3), activation='relu'))
    # 池化层,shape值除以2
    model.add(MaxPooling2D(pool_size=(2, 2)))
    # dropout层,舍弃0.25的神经元
    model.add(Dropout(0.25))
    # 卷积层
    model.add(Conv2D(filters=64, kernel_size=(3, 3), activation='relu', padding='same'))
    # 卷积层
    model.add(Conv2D(filters=64, kernel_size=(3, 3), activation='relu'))
    # 池化层
    model.add(MaxPooling2D(pool_size=(2, 2)))
    # dropout层
    model.add(Dropout(0.25))
    # flatten展开层,将二维三维张量摊平(展开)成一维向量
    model.add(Flatten())
    # 全连接层
    model.add(Dense(512, activation='relu'))
    # dropout层
    model.add(Dropout(0.5))
    # 全连接层
    model.add(Dense(10, activation='softmax'))
    model.summary()
    opt = keras.optimizers.rmsprop(lr=0.0001, decay=1e-6)
    model.compile(loss='categorical_crossentropy',
                  optimizer=opt,
                  metrics=['accuracy'])
    return model


# 训练模型所需的数据进行图像转换
def train_model():
    # 数据增强器,包含了范围20°内的随机旋转,±15%的缩放以及随机的水平翻转
    data_modify = ImageDataGenerator(
        rotation_range=20,
        zoom_range=0.15,
        horizontal_flip=True,
    )
    return data_modify


# main方法
def main():
    (x, y), (x_, y_) = load_dataset_data()
    x, y, x_, y_ = standard_data(x, y, x_, y_)
    # 这里是训练模型
    show_data(x)
    print(x.shape, y.shape)
    model = make_model()
    data = train_model()
    model.fit_generator(data.flow(x, y, batch_size=64), steps_per_epoch=1000, epochs=20, validation_data=(x_, y_))
    model.save('cifar10_trained_model.h5')
    # 下面是加载模型并进行测试
    mnist_model = load_model('cifar10_trained_model.h5')
    scores = mnist_model.evaluate(x_, y_, verbose=1)
    print('Test loss:', scores[0])
    print('Test accuracy:', scores[1])


if __name__ == "__main__":
    main()
目录
相关文章
|
3月前
|
机器学习/深度学习
大模型开发:解释卷积神经网络(CNN)是如何在图像识别任务中工作的。
**CNN图像识别摘要:** CNN通过卷积层提取图像局部特征,池化层减小尺寸并保持关键信息,全连接层整合特征,最后用Softmax等分类器进行识别。自动学习与空间处理能力使其在图像识别中表现出色。
66 2
|
3月前
|
机器学习/深度学习 编解码 PyTorch
Pytorch实现手写数字识别 | MNIST数据集(CNN卷积神经网络)
Pytorch实现手写数字识别 | MNIST数据集(CNN卷积神经网络)
|
10天前
|
机器学习/深度学习
CNN模型验证和CNN模型保存
【8月更文挑战第10天】CNN模型验证和CNN模型保存。
51 27
|
10天前
|
机器学习/深度学习
加载CNN保存模型
【8月更文挑战第10天】加载CNN保存模型。
32 12
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
算法金 | 秒懂 AI - 深度学习五大模型:RNN、CNN、Transformer、BERT、GPT 简介
**RNN**,1986年提出,用于序列数据,如语言模型和语音识别,但原始模型有梯度消失问题。**LSTM**和**GRU**通过门控解决了此问题。 **CNN**,1989年引入,擅长图像处理,卷积层和池化层提取特征,经典应用包括图像分类和物体检测,如LeNet-5。 **Transformer**,2017年由Google推出,自注意力机制实现并行计算,优化了NLP效率,如机器翻译。 **BERT**,2018年Google的双向预训练模型,通过掩码语言模型改进上下文理解,适用于问答和文本分类。
87 9
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
图神经网络是一类用于处理图结构数据的神经网络。与传统的深度学习模型(如卷积神经网络CNN和循环神经网络RNN)不同,
图神经网络是一类用于处理图结构数据的神经网络。与传统的深度学习模型(如卷积神经网络CNN和循环神经网络RNN)不同,
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
计算机视觉借助深度学习实现了革命性进步,从图像分类到复杂场景理解,深度学习模型如CNN、RNN重塑了领域边界。
【7月更文挑战第2天】计算机视觉借助深度学习实现了革命性进步,从图像分类到复杂场景理解,深度学习模型如CNN、RNN重塑了领域边界。AlexNet开启新时代,后续模型不断优化,推动对象检测、语义分割、图像生成等领域发展。尽管面临数据隐私、模型解释性等挑战,深度学习已广泛应用于安防、医疗、零售和农业,预示着更智能、高效的未来,同时也强调了技术创新、伦理考量的重要性。
35 1
|
1月前
|
机器学习/深度学习 数据采集 算法
Python基于卷积神经网络CNN模型和VGG16模型进行图片识别项目实战
Python基于卷积神经网络CNN模型和VGG16模型进行图片识别项目实战
|
2月前
|
机器学习/深度学习 JSON 测试技术
CNN依旧能战:nnU-Net团队新研究揭示医学图像分割的验证误区,设定先进的验证标准与基线模型
在3D医学图像分割领域,尽管出现了多种新架构和方法,但大多未能超越2018年nnU-Net基准。研究发现,许多新方法的优越性未经严格验证,揭示了验证方法的不严谨性。作者通过系统基准测试评估了CNN、Transformer和Mamba等方法,强调了配置和硬件资源的重要性,并更新了nnU-Net基线以适应不同条件。论文呼吁加强科学验证,以确保真实性能提升。通过nnU-Net的变体和新方法的比较,显示经典CNN方法在某些情况下仍优于理论上的先进方法。研究提供了新的标准化基线模型,以促进更严谨的性能评估。
92 0
|
2月前
|
机器学习/深度学习 自然语言处理 PyTorch
【自然语言处理NLP】Bert预训练模型、Bert上搭建CNN、LSTM模型的输入、输出详解
【自然语言处理NLP】Bert预训练模型、Bert上搭建CNN、LSTM模型的输入、输出详解
58 0

热门文章

最新文章

相关实验场景

更多