【深度学习】基于tensorflow的小型物体识别训练(数据集:CIFAR-10)

活动地址:CSDN21天学习挑战赛

前言

关于环境这里不再赘述,与【深度学习】从LeNet-5识别手写数字入门深度学习一文的环境一致。

了解CIFAR-10数据集

CIFAR-10 是由 Hinton 的学生 Alex Krizhevsky 和 Ilya Sutskever 整理的一个用于识别普适物体的小型数据集。一共包含 10 个类别的 RGB 彩色图 片:飞机( aircraft )、汽车( automobile )、鸟类( bird )、猫( cat )、鹿( deer )、狗( dog )、蛙类( frog )、马( horse )、船( ship )和卡车( truck )。图片的尺寸32×32 ,数据集中一共有 50000 张训练图片10000 张测试图片。 CIFAR-10 的图片样例如图所示。
在这里插入图片描述

CIFAR-10数据集与 MNIST 数据集的区别

• CIFAR-10 是 3 通道的彩色 RGB 图像,而 MNIST 是灰度图像。
• CIFAR-10 的图片尺寸为 32×32, MNIST 的图片尺寸为 28×28,比 MNIST 大一些。
• 由于CIFAR-10中的图片都是现实世界中拍摄的,所以噪声会很大,而且各类物体的比例、特征、色彩等均不同,这大大增加了识别的难度。

下载数据集

官方下载地址(较慢)

https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz

使用tensorflow下载(推荐)

默认下载在C:\Users\用户\.keras\datasets路径下。

from tensorflow.keras import datasets

# 下载数据集
(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()

使用迅雷(推荐)

如果你和我一样使用代码下载还是一样的慢,就使用迅雷吧。
在这里插入图片描述
下载完成后将文件移动至C:\Users\用户\.keras\datasets路径下,并将压缩包名修改为下面图中同名,并解压。
在这里插入图片描述

采用CPU训练还是GPU训练

一般来说有好的显卡(GPU)就使用GPU训练因为,那么对应的你就要下载tensorflow-gpu包。如果你的显卡较差或者没有足够资金入手一款好的显卡就可以使用CUP训练。

区别

(1)CPU主要用于串行运算;而GPU则是大规模并行运算。由于深度学习中样本量巨大,参数量也很大,所以GPU的作用就是加速网络运算。

(2)CPU计算神经网络也是可以的,算出来的神经网络放到实际应用中效果也很好,只不过速度会很慢罢了。而目前GPU运算主要集中在矩阵乘法和卷积上,其他的逻辑运算速度并没有CPU快。

使用CPU训练

# 使用cpu训练
import os

os.environ["CUDA_VISIBLE_DEVICES"] = "-1"

使用CPU训练时不会显示CPU型号。
在这里插入图片描述

使用GPU训练

gpus = tf.config.list_physical_devices("GPU")

if gpus:
    gpu0 = gpus[0]  # 如果有多个GPU,仅使用第0个GPU
    tf.config.experimental.set_memory_growth(gpu0, True)  # 设置GPU显存用量按需使用
    tf.config.set_visible_devices([gpu0], "GPU")

使用GPU训练时会显示对应的GPU型号。
在这里插入图片描述

显示部分图片

首先需要建立一个标签数组,然后绘制前20张,每行5个共四行

from matplotlib import pyplot as plt

class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']

plt.figure(figsize=(20, 10))
for i in range(20):
    plt.subplot(4, 5, i + 1)
    plt.xticks([])
    plt.yticks([])
    plt.grid(False)
    plt.imshow(train_images[i], cmap=plt.cm.binary)
    plt.xlabel(class_names[train_labels[i][0]])
plt.show()

绘制结果:
在这里插入图片描述

建立CNN模型

from tensorflow_core.python.keras import Input, Sequential
from tensorflow_core.python.keras.layers import Conv2D, Activation, MaxPooling2D, Flatten, Dense


def simple_CNN(input_shape=(32, 32, 3), num_classes=10):
    # 构建一个空的网络模型,它是一个线性堆叠模型,各神经网络层会被顺序添加,专业名称为序贯模型或线性堆叠模型
    model = Sequential()

    # 卷积层1 
    model.add(Conv2D(filters=32, kernel_size=(3, 3), activation='relu', input_shape=input_shape))

    # 最大池化层1
    model.add(MaxPooling2D((2, 2), strides=(2, 2), padding='same'))

    # 卷积层2
    model.add(Conv2D(filters=64, kernel_size=(3, 3), padding='same', activation='relu'))

    # 最大池化层2
    model.add(MaxPooling2D((2, 2), strides=(2, 2), padding='same'))

    # 卷积层3
    model.add(Conv2D(filters=64, kernel_size=(3, 3), padding='same', activation='relu'))

    # flatten层常用来将输入“压平”,即把多维的输入一维化,常用在从卷积层到全连接层的过渡。
    model.add(Flatten())

    # 全连接层 对特征进行提取
    model.add(Dense(units=64, activation='relu'))

    # 输出层
    model.add(Dense(10))
    return model


网络结构

包含输入层的话总共9层。其中有三个卷积层,俩个最大池化层,一个flatten层,俩个全连接层。
在这里插入图片描述

参数量

总共参数为319k,训练时间比LeNet-5较长。建议采用GPU训练。

Total params: 319,178
Trainable params: 319,178
Non-trainable params: 0

训练模型

训练模型,进行10轮,将模型保存到1.h5文件中。后期可以直接加载模型继续训练。

from tensorflow_core.python.keras.models import load_model
from Cnn import simple_CNN
import tensorflow as tf


def train(train_images, train_labels, test_images, test_labels):
    model = simple_CNN(train_images, train_labels) 
    model.summary()  # 打印网络结构


    model.compile(optimizer='adam',
                  loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
                  metrics=['accuracy'])
    model.save("1.h5")
    history = model.fit(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels))

训练结果:测试集acc为66.53%。后期可以增加轮数或者优化模型。
在这里插入图片描述

  • 3
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
### 回答1: 使用TensorFlow进行深度学习CIFAR-10数据集的模型训练和识别可以遵循以下步骤: 1. 导入必要的库和CIFAR-10数据集:首先,需要导入TensorFlow和其他必要的库(例如numpy、matplotlib等),并下载CIFAR-10数据集。可以使用TensorFlow内置的数据集API或手动下载数据集。 2. 数据预处理:在将数据提供给模型之前,需要对数据进行预处理,例如将像素值归一化、对标签进行独热编码等。 3. 构建模型:可以使用TensorFlow的高级API(例如Keras)来构建深度学习模型。通常,使用卷积神经网络(CNN)来处理图像数据。可以根据任务的要求设计适当的网络结构。 4. 模型编译和训练:在将数据提供给模型之前,需要对数据进行预处理,例如将像素值归一化、对标签进行独热编码等。使用适当的优化器和损失函数来编译模型,并使用训练训练模型。 5. 模型评估:在训练模型后,可以使用测试集对模型进行评估。可以计算准确率、损失函数值等指标。 6. 模型应用:在模型训练和评估后,可以使用模型进行预测。提供新的输入数据,模型将返回预测结果。 总之,使用TensorFlow进行CIFAR-10数据集深度学习模型训练和识别需要对数据进行预处理、构建CNN模型、编译和训练模型、评估模型以及应用模型进行预测。 ### 回答2: 深度学习是一种以神经网络为基础的机器学习方法,而TensorFlow是一个由谷歌公司开发的支持深度学习的开源框架。在TensorFlow框架下,使用卷积神经网络(Convolutional Neural Network,CNN)对CIFAR-10数据集进行分类是一个非常经典的任务。 CIFAR-10数据集包含了10个不同的分类标签,包括飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船和卡车,每类数据有5000个训练样本和1000个测试样本。因此,模型的训练可以使用训练集进行,而测试过程则基于测试集进行。 在构建CNN模型时,可以使用序列化API(Sequential API)或函数式API(Functional API)进行设计和开发。对于序列化API,可以选择将不同的深度网络层(如卷积层、池化层、全连接层等)按照顺序叠加组合。而对于函数式API,则允许具有多个输入和输出的复杂模型。典型的CNN模型包括卷积层、池化层和全连接层。 在模型训练过程中,常用的优化器是随机梯度下降(Stochastic gradient descent,SGD)。还可以使用其他优化算法,如动量法(Momentum),Adagrad和Adam。同时,在训练过程中,需要考虑过拟合的问题,采取常用的对策如正则化、dropout等。 在模型训练完成后,测试模型将是一个核心的任务。可以通过计算模型的精确性(accuracy)和损失函数(loss)来验证模型的准确性。而常用的评估指标还包括ROC曲线、AUC值等。 总之,TensorFlow深度学习CIFAR-10数据集上的模型训练与识别任务是一个非常具有挑战性的任务。它需要深入理解神经网络的架构和特性,同时也需要熟悉常用的训练算法和评估指标。随着不断发展的人工智能技术和深度学习模型,TensorFlow在各个领域的应用前景非常广阔。 ### 回答3: TensorFlow是一个深度学习框架,广泛应用于研究和工业应用中。CIFAR10是一个广泛使用的图像分类数据集,由10个类别的60000张32x32像素图像组成。 TensorFlow提供了许多工具和API来训练和识别基于CIFAR10数据集的模型。 1. 准备数据 CIFAR10数据集可以从网上下载,通过使用Python编写脚本可以将其转换成可用于TensorFlow训练和识别的格式。例如,使用TensorFlow的数据输入库,可以将图像预处理,并将其转换为模型输入的batch格式。 2. 定义模型 可以使用TensorFlow构建各种类型的神经网络训练CIFAR10数据集,如卷积神经网络(CNN)和循环神经网络(RNN)。TensorFlow提供的各种API可以方便地定义网络的结构和层,从而创建一个高效的图像分类器。 3. 训练模型 要训练模型,需要使用TensorFlow的优化器来计算和调整网络权重和偏置,以最小化损失函数。在训练期间,还需要定义一些指标来监控模型的性能和进度。可以使用TensorFlow提供的训练API,创建训练循环,并针对单个或多个GPU进行分布式训练。 4. 评估和测试模型 为确保神经网络在完全独立于训练数据的环境中运行良好,需要对其进行评估和测试。可以使用TensorFlow提供的API,对模型的准确性和性能进行评估。评估模型时,可以使用验证数据集,在训练过程中监控模型的泛化性能,避免过拟合。 5. 部署模型 一旦模型经过训练并通过评估,就可以使用TensorFlow的模型导出和转换工具,将其部署到生产环境中。TensorFlow支持将模型导出为TensorFlow Lite格式,以在移动设备上运行,并提供了Java,C++和Python等多种语言的API,便于将模型嵌入到应用程序中。 总之,TensorFlow提供了几种方法来训练和识别CIFAR10数据集上的模型。可以结合使用TensorFlow的API,优化器和分布式训练工具,以提高模型效率和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林夕07

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值