Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用TensorFlow训练图像分类模型的指南

使用TensorFlow训练图像分类模型的指南

原创
作者头像
一点人工一点智能
发布于 2023-01-15 01:33:59
发布于 2023-01-15 01:33:59
1.5K06
代码可运行
举报
运行总次数:6
代码可运行

转载自:51CTO技术栈

原文地址:使用TensorFlow训练图像分类模型的指南

众所周知,人类在很小的时候就学会了识别和标记自己所看到的事物。如今,随着机器学习深度学习算法的不断迭代,计算机已经能够以非常高的精度,对捕获到的图像进行大规模的分类了。目前,此类先进算法的应用场景已经涵括到了包括:解读肺部扫描影像是否健康,通过移动设备进行面部识别,以及为零售商区分不同的消费对象类型等领域。

下面,我将和您共同探讨计算机视觉(Computer Vision)的一种应用——图像分类,并逐步展示如何使用TensorFlow,在小型图像数据集上进行模型的训练。

01  数据集和目标

在本示例中,我们将使用MNIST数据集的从0到9的数字图像。其形态如下图所示:

我们训练该模型的目的是为了将图像分类到其各自的标签下,即:它们在上图中各自对应的数字处。通常,深度神经网络架构会提供一个输入、一个输出、两个隐藏层(Hidden Layers)和一个用于训练模型的Dropout层。而CNN或卷积神经网络(Convolutional Neural Network)是识别较大图像的首选,它能够在减少输入量的同时,捕获到相关的信息。

02  准备工作

首先,让我们通过TensorFlow、to_categorical(用于将数字类的值转换为其他类别)、Sequential、Flatten、Dense、以及用于构建神经网络架构的 Dropout,来导入所有相关的代码库。您可能会对此处提及的部分代码库略感陌生。我会在下文中对它们进行详细的解释。

03  超参数

我将通过如下方面,来选择正确的超参数集:

  • 首先,让我们定义一些超参数作为起点。后续,您可以针对不同的需求,对其进行调整。在此,我选择了128作为较小的批量尺寸(batch size)。其实,批量尺寸可以取任何值,但是2的幂次方大小往往能够提高内存的效率,因此应作为首选。值得注意的是,在决定合适的批量尺寸时,其背后的主要参考依据是:过小的批量尺寸会使收敛过于繁琐,而过大的批量尺寸则可能并不适合您的计算机内存。
  • 让我们将epoch(训练集中每一个样本都参与一次训练)的数量保持为50 ,以实现对模型的快速训练。epoch数值越低,越适合小而简单的数据集。
  • 接着,您需要添加隐藏层。在此,我为每个隐藏层都保留了128个神经元。当然,你也可以用64和32个神经元进行测试。就本例而言,像MINST这样的简单数据集,我并不建议使用较高的数值。
  • 您可以尝试不同的学习率(learning rate),例如0.01、0.05和0.1。在本例中,我将其保持为0.01。
  • 对于其他超参数,我将衰减步骤(decay steps)和衰减率(decay rate)分别选择为2000和0.9。而随着训练的进行,它们可以被用来降低学习率。
  • 在此,我选择Adamax作为优化器。当然,您也可以选择诸如Adam、RMSProp、SGD等其他优化器。

代码语言:python
代码运行次数:6
运行
AI代码解释
复制
import tensorflow as tf
from tensorflow.keras.utils import to_categorical
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Flatten, Dense, Dropout
params = {
    'dropout': 0.25,
    'batch-size': 128,
    'epochs': 50,
    'layer-1-size': 128,
    'layer-2-size': 128,
    'initial-lr': 0.01,
    'decay-steps': 2000,
    'decay-rate': 0.9,
    'optimizer': 'adamax'
}
mnist = tf.keras.datasets.mnist  
num_class = 10
# split between train and test sets
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# reshape and normalize the data
x_train = x_train.reshape(60000, 784).astype("float32")/255
x_test = x_test.reshape(10000, 784).astype("float32")/255
# convert class vectors to binary class matrices
y_train = to_categorical(y_train, num_class)
y_test = to_categorical(y_test, num_class)

04  创建训练和测试集

由于TensorFlow库也包括了MNIST数据集,因此您可以通过调用对象上的 datasets.mnist ,再调用load_data() 的方法,来分别获取训练(60,000个样本)和测试(10,000个样本)的数据集。

接着,您需要对训练和测试的图像进行整形和归一化。其中,归一化会将图像的像素强度限制在0和1之间。

最后,我们使用之前已导入的to_categorical 方法,将训练和测试标签转换为已分类标签。这对于向TensorFlow框架传达输出的标签(即:0到9)为类(class),而不是数字类型,是非常重要的。

05  设计神经网络架构

下面,让我们来了解如何在细节上设计神经网络架构。

我们通过添加Flatten ,将2D图像矩阵转换为向量,以定义DNN(深度神经网络)的结构。输入的神经元在此处对应向量中的数字。

接着,我使用Dense() 方法,添加两个隐藏的密集层,并从之前已定义的“params”字典中提取各项超参数。我们可以将“relu”(Rectified Linear Unit)作为这些层的激活函数。它是神经网络隐藏层中最常用的激活函数之一。

然后,我们使用Dropout方法添加Dropout层。它将被用于在训练神经网络时,避免出现过拟合(overfitting)。毕竟,过度拟合模型倾向于准确地记住训练集,并且无法泛化那些不可见(unseen)的数据集。

输出层是我们网络中的最后一层,它是使用Dense() 方法来定义的。需要注意的是,输出层有10个神经元,这对应于类(数字)的数量。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# Model Definition
# Get parameters from logged hyperparameters
model = Sequential([
Flatten(input_shape=(784, )),
Dense(params('layer-1-size'), activation='relu'),
Dense(params('layer-2-size'), activation='relu'),
Dropout(params('dropout')),
Dense(10)
])
lr_schedule =
tf.keras.optimizers.schedules.ExponentialDecay(
initial_learning_rate=experiment.get_parameter('initial-lr'),
decay_steps=experiment.get_parameter('decay-steps'),
decay_rate=experiment.get_parameter('decay-rate')
)
loss_fn = tf.keras.losses.CategoricalCrossentropy(from_logits=True)
model.compile(optimizer='adamax',
loss=loss_fn,
metrics=['accuracy'])
model.fit(x_train, y_train,
batch_size=experiment.get_parameter('batch-size'),
epochs=experiment.get_parameter('epochs'),
validation_data=(x_test, y_test),)
score = model.evaluate(x_test, y_test)
# Log Model
model.save('tf-mnist-comet.h5')

06  训练

至此,我们已经定义好了架构。下面让我们用给定的训练数据,来编译和训练神经网络。

  • 首先,我们以初始学习率、衰减步骤和衰减率作为参数,使用ExponentialDecay(指数衰减学习率)来定义学习率计划。
  • 其次,将损失函数定义为CategoricalCrossentropy(用于多类式分类)。
  • 接着,通过将优化器 (即:adamax)、损失函数、以及各项指标(由于所有类都同等重要、且均匀分布,因此我选择了准确性)作为参数,来编译模型。
  • 然后,我们通过使用x_train、y_train、batch_size、epochs和validation_data去调用一个拟合方法,并拟合出模型。
  • 同时,我们调用模型对象的评估方法,以获得模型在不可见数据集上的表现分数。
  • 最后,您可以使用在模型对象上调用的save方法,保存要在生产环境中部署的模型对象。

07  小结

综上所述,我们讨论了为图像分类任务,训练深度神经网络的一些入门级的知识。您可以将其作为熟悉使用神经网络,进行图像分类的一个起点。据此,您可了解到该如何选择正确的参数集、以及架构背后的思考逻辑。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
深度学习 —— 使用TensorFlow和Keras实现MLP进行数字识别
早上好,朋友们,今天我们来继续充电。我们都知道多层感知机(Multilayer Perceptron, MLP)是深度神经网络的一种基本形式,它主要由输入层、一个或多个隐藏层以及输出层组成。MLP通过非线性激活函数(如ReLU、sigmoid或tanh)引入非线性,使得模型能够学习到数据中的复杂特征。今天我们就来使用TensorFlow和Keras实现MLP进行数字识别。
china马斯克
2025/03/18
2580
深度学习(八) TensorFlow、PyTorch、Keras框架大比拼(8/10)
深度学习框架在当今人工智能和机器学习领域中占据着至关重要的地位。其中,TensorFlow 由 Google 开发,自 2015 年发布以来,凭借其灵活的计算图、自动微分功能以及跨平台支持等特点,迅速成为主流深度学习框架之一。它在图像识别、自然语言处理、语音识别等多个领域都有广泛应用。例如,在图像识别任务中,通过卷积神经网络能够准确识别物体、人脸和车辆等。
正在走向自律
2024/12/18
9340
深度学习(八) TensorFlow、PyTorch、Keras框架大比拼(8/10)
入门项目数字手写体识别:使用Keras完成CNN模型搭建
对于图像分类任务而言,卷积神经网络(CNN)是目前最优的网络结构,没有之一。在面部识别、自动驾驶、物体检测等领域,CNN被广泛使用,并都取得了最优性能。对于绝大多数深度学习新手而言,数字手写体识别任务可能是第一个上手的项目,网络上也充斥着各种各样的成熟工具箱的相关代码,新手在利用相关工具箱跑一遍程序后就能立刻得到很好的结果,这时候获得的感受只有一个——深度学习真神奇,却没能真正了解整个算法的具体流程。本文将利用Keras和TensorFlow设计一个简单的二维卷积神经网络(CNN)模型,手把手教你用代码完成MNIST数字识别任务,便于理解深度学习的整个流程。
用户3578099
2019/08/16
9510
自动驾驶汽车的交通标志识别
由于特斯拉等公司在电动汽车自动化方面的努力,无人驾驶汽车正变得非常受欢迎。为了成为5级自动驾驶汽车,这些汽车必须正确识别交通标志并遵守交通规则。在识别出这些交通标志之后,它还应该能够适当地做出正确的决定。
代码医生工作室
2020/02/21
1.6K0
自动驾驶汽车的交通标志识别
Python深度学习框架:PyTorch、Keras、Scikit-learn、TensorFlow如何使用?学会轻松玩转AI!
总的来说,这四个工具箱各有各的优点,适合不同的任务和学习阶段。 你想盖什么样子的“房子”(解决什么问题),就选择合适的工具箱。 接下来让我们去了解一下他们吧
小白的大数据之旅
2024/11/26
2.4K0
Python深度学习框架:PyTorch、Keras、Scikit-learn、TensorFlow如何使用?学会轻松玩转AI!
R语言中的keras
Keras是一个高层神经网络API,由纯Python编写而成。此API支持相同的代码无缝跑在CPU或GPU上;对用户友好,易于快速prototype深度学习模型;支持计算机视觉中的卷积网络、序列处理中的循环网络,也支持两种网络的任意组合;支持任意网络架构:多段输入或多段输出模型、层共享、模型共享等。这意味着Keras 本质上适合用于构建任意深度学习模型(从记忆网络到神经图灵机)兼容多种运行后端,例如TensorFlow、CNTK和Theano。
一粒沙
2021/12/20
2.7K1
R语言中的keras
R语言中不能进行深度学习?
摘要: R语言现在能也进行深度学习了,而且和python一样好,快来试一试吧。 众所周知,R语言是统计分析最好用的语言。但在Keras和TensorFlow的帮助下,R语言也可以进行深度学习了。 在机器学习的语言的选择上,R和Python之间选择一直是一个有争议的话题。但随着深度学习的爆炸性增长,越来越多的人选择了Python,因为它有一个很大的深度学习库和框架,而R却没有(直到现在)。 但是我就是想使用R语言进入深度学习空间,所以我就从Python领域转入到了R领域,继续我的深度学习的研究了。这可能看
小莹莹
2018/04/24
1.4K0
R语言中不能进行深度学习?
keras 基础入门整理
在进行自然语言处理之前,需要对文本进行处理。 本文介绍keras提供的预处理包keras.preproceing下的text与序列处理模块sequence模块
学到老
2019/01/25
1.6K0
使用Python实现深度学习模型:智能医疗影像分析
随着人工智能技术的飞速发展,深度学习在医疗领域的应用越来越广泛。智能医疗影像分析是其中一个重要的应用方向,通过深度学习模型,可以自动分析和识别医疗影像,提高诊断的准确性和效率。本文将详细介绍如何使用Python实现一个深度学习模型,用于智能医疗影像分析。
Echo_Wish
2024/09/09
4530
使用Python实现深度学习模型:智能医疗影像分析
深度学习工具和框架详细指南:PyTorch、TensorFlow、Keras
在深度学习的世界中,PyTorch、TensorFlow和Keras是最受欢迎的工具和框架,它们为研究者和开发者提供了强大且易于使用的接口。在本文中,我们将深入探索这三个框架,涵盖如何用它们实现经典深度学习模型,并通过代码实例详细讲解这些工具的使用方法。
平凡之路.
2024/11/21
1.8K0
Keras框架速查手册(Python For Data Science Cheat Sheet Keras)
Keras框架速查表 1 Keras 1.1 一个基本示例 2 数据 2.1 Keras数据设置 3 模型结构 3.1 Sequential模型 3.2 多层感知器(MLP) 3.2.1 二元分类 3.2.2 多类别分类 3.2.3 回归 3.3 卷积神经网络(CNN) 3.4 循环神经网络(RNN) 4 预处理 4.1 序列填充 4.2 创建虚拟变量 4.3 训练集、测试集分离 4.4 标准化/归一化 5 模型细节提取 5.1 模型输出形状 5.2 模型总结 5.3 get模型参数 5.4 g
荣仔_最靓的仔
2022/01/05
4190
Keras框架速查手册(Python For Data Science Cheat Sheet Keras)
【机器学习】机器学习与图像分类的融合应用与性能优化新探索
图像分类是计算机视觉领域的一项基本任务,通过分析和理解图像中的内容,自动将图像归类到预定义的类别中。随着深度学习技术的发展,机器学习在图像分类中的应用取得了显著的进展,推动了自动驾驶、医疗影像分析、智能监控等领域的发展。本文将详细介绍机器学习在图像分类中的应用,包括数据预处理、模型选择、模型训练和性能优化。通过具体的案例分析,展示机器学习技术在图像分类中的实际应用,并提供相应的代码示例。
E绵绵
2024/07/16
2690
一个超强算法模型,CNN !!
大概介绍下:MNIST数字分类项目旨在使用机器学习技术来构建一个模型,能够自动识别手写数字的图像。这个项目是一个经典的图像分类任务,常用于入门级机器学习和深度学习示例。我们会使用MNIST数据集,这个数据集包含了一系列28x28像素的手写数字图像,从0到9。项目的目标是训练一个模型,能够准确地将这些手写数字图像分类到正确的数字标签。
Python编程爱好者
2023/12/05
5150
一个超强算法模型,CNN !!
使用CNN模型解决图像分类问题(tensorflow)
在深度学习领域,卷积神经网络(Convolutional Neural Network,CNN)在图像分类问题中取得了显著的成功。本文将使用TensorFlow或Keras编写一个简单的CNN模型来解决图像分类问题。
大盘鸡拌面
2024/03/25
6950
深度学习入门(一),从Keras开始
安装环境:Anaconda(python3.6) 首先安装:tensorflow.(通过navigator,可参见直通车) 检验:import tensorflow as tf Keras在anaconda下没有原装的安装包,只有使用pip安装方式,安装Keras,pip install Keras
学到老
2019/01/25
2.3K0
深度学习入门(一),从Keras开始
Python人工智能 | 十七.Keras搭建分类神经网络及MNIST数字图像案例分析
从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前一篇文章详细讲解了Keras环境搭建、入门基础及回归神经网络案例。本篇文章将通过Keras实现分类学习,以MNIST数字图片为例进行讲解。基础性文章,希望对您有所帮助!
Eastmount
2022/04/19
1.3K0
Python人工智能 | 十七.Keras搭建分类神经网络及MNIST数字图像案例分析
MLK | Keras 入门深度学习逢看必会
Keras作为深度学习工具,对于 初学者还是蛮友好的,在安装前,我们要知道Keras 是一个用 Python 编写的高级神经网络 API,它能够以 TensorFlow, CNTK, 或者 Theano 作为后端运行。因此我们安装Keras前,就必须安装相关的依赖包。
Sam Gor
2019/08/09
7180
MLK | Keras 入门深度学习逢看必会
Keras入门级MNIST手写数字识别超级详细教程
文件下载:https://download.csdn.net/download/sxf1061700625/19229794
小锋学长生活大爆炸
2021/05/30
6.8K0
Keras入门级MNIST手写数字识别超级详细教程
使用python实现图像识别
图像识别是人工智能中的重要分支之一,通过使用机器学习算法来训练模型,使其能够识别图像中的物体、场景或人脸等。在本文中,我们将介绍使用Python实现图像识别的方法,其中主要使用的是深度学习框架Keras和OpenCV库。
堕落飞鸟
2023/03/27
12.8K1
【人工智能】全景解析:【机器学习】【深度学习】从基础理论到应用前景的【深度探索】
无监督学习 是一种机器学习类型,模型在没有标注数据的情况下,通过识别数据中的模式和结构进行学习。
小李很执着
2024/08/14
3210
推荐阅读
相关推荐
深度学习 —— 使用TensorFlow和Keras实现MLP进行数字识别
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档