百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

TensorFlow和Keras入门必读教程(tensorflow_core.keras)

ztj100 2025-06-13 18:13 4 浏览 0 评论

导读:本文对TensorFlow的框架和基本示例进行简要介绍。

作者:本杰明·普朗什(Benjamin Planche)艾略特·安德烈斯(Eliot Andres)

来源:华章科技

01 TensorFlow

TensorFlow最初由Google开发,旨在让研究人员和开发人员进行机器学习研究。它最初被定义为描述机器学习算法的接口,以及执行该算法的实现。

TensorFlow的主要预期目标是简化机器学习解决方案在各种平台上的部署,如计算机CPU、计算机GPU、移动设备以及最近的浏览器中的部署。最重要的是,TensorFlow提供了许多有用的功能来创建机器学习模型并大规模运行它们。TensorFlow 2于2019年发布,它专注于易用性,并能保持良好的性能。

这个库于2015年11月开源。从那时起,它已被世界各地的用户改进和使用。它被认为是开展研究的首选平台之一。就GitHub活跃度而言,它也是最活跃的深度学习框架之一。

TensorFlow既可供初学者使用,也可供专家使用。TensorFlow API具有不同级别的复杂度,从而使初学者可以从简单的API开始,同时也可以让专家创建非常复杂的模型。我们来探索一下这些不同级别的模型。

1. TensorFlow主要架构

TensorFlow架构(见图2-1)具有多个抽象层级。我们首先介绍底层,然后逐渐通往最上层。

大多数深度学习计算都是用C++编码的。为了在GPU上进行运算,TensorFlow使用了由NVIDIA开发的库CUDA。这就是如果想要利用GPU功能就需要安装CUDA,以及不能使用其他硬件制造商GPU的原因。

然后,Python底层API(low-level API)封装了C++源代码。当调用TensorFlow的Python方法时,通常会在后台调用C++代码。这个封装层使用户可以更快地工作,因为Python被认为更易于使用并且不需要编译。该Python封装器可以创建非常基本的运算,例如矩阵乘法和加法。

最上层是高级API(high-level API),由Keras和评估器API(estimator API)两个组件组成。Keras是TensorFlow的一个用户友好型、模块化且可扩展的封装器,评估器API包含多个预制组件,可让你轻松地构建机器学习模型。你可以将它们视为构建块或模板。

  • tip:在深度学习中,模型通常是指经过数据训练的神经网络。模型由架构、矩阵权重和参数组成。

2. Keras介绍

Keras于2015年首次发布,它被设计为一种接口,可用于使用神经网络进行快速实验。因此,它依赖TensorFlow或Theano(另一个深度学习框架,现已弃用)来运行深度学习操作。Keras以其用户友好性著称,是初学者的首选库。

自2017年以来,TensorFlow完全集成了Keras,这意味着无须安装TensorFlow以外的任何库就可使用它。我们将依赖tf.keras而不是Keras的独立版本。这两个版本之间有一些细微的差异,例如与TensorFlow的其他模块的兼容性以及模型的保存方式。因此,读者必须确保使用正确的版本,具体方法如下:

  • 在代码中,导入tf.keras而不是keras。
  • 浏览TensorFlow网站上的tf.keras文档,而不是keras.io文档。
  • 在使用外部Keras库时,请确保它们与tf.keras兼容。
  • 某些保存的模型在Keras版本之间可能不兼容。

这两个版本在可预见的未来将继续共存,而tf.keras与TensorFlow集成将越来越密切。为了说明Keras的强大功能和简单性,我们将使用该库实现一个简单的神经网络。

02 基于Keras的简单计算机视觉模型

在深入探讨TensorFlow的核心概念之前,我们先从一个计算机视觉的经典示例开始,它使用数据集MNIST进行数字识别。

1. 准备数据

首先,导入数据。它由用于训练集的60 000幅图像和用于测试集的10 000幅图像组成:

import tensorflow as tf

num_classes = 10
img_rows, img_cols = 28, 28
num_channels = 1
input_shape = (img_rows, img_cols, num_channels)

(x_train, y_train),(x_test, y_test) = tf.keras.datasets.mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
  • tip:常见的做法是使用别名tf来导入TensorFlow,从而加快读取和键入速度。通常用x表示输入数据,用y表示标签。

tf.keras.datasets模块提供快速访问,以下载和实例化一些经典数据集。使用load_data导入数据后,请注意,我们将数组除以255.0,得到的数字范围为[0, 1]而不是[0, 255]。将数据归一化在[0, 1]范围或[-1, 1]范围是一种常见的做法。

2. 构建模型

现在,我们可以继续构建实际模型。我们将使用一个非常简单的架构,该架构由两个全连接层(也称为稠密层)组成。在详细介绍架构之前,我们来看一下代码。可以看到,Keras代码非常简洁:

model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(128, activation='relu'))
model.add(tf.keras.layers.Dense(num_classes, activation='softmax'))

由于模型是层的线性堆栈,因此我们首先调用Sequential函数。然后,依次添加每一层。模型由两个全连接层组成。我们逐层构建:

  • 展平层(Flatten):它将接受表示图像像素的二维矩阵,并将其转换为一维数组。我们需要在添加全连接层之前执行此操作。28×28的图像被转换为大小为784的向量。
  • 大小为128的稠密层(Dense):它使用大小为128×784的权重矩阵和大小为128的偏置矩阵,将784个像素值转换为128个激活值。这意味着有100 480个参数。
  • 大小为10的稠密层(Dense):它将把128个激活值转变为最终预测。注意,因为概率总和为1,所以我们将使用softmax激活函数。
  • tip:softmax函数获取某层的输出,并返回总和为1的概率。它是分类模型最后一层的选择的激活函数。

请注意,使用model.summary()可以获得有关模型、输出及其权重的描述。下面是输出:

设置好架构并初始化权重后,模型现在就可以针对所选任务进行训练了。

3. 训练模型

Keras让训练变得非常简单:

model.compile(optimizer='sgd',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
callbacks = [tf.keras.callbacks.TensorBoard('./keras')]
model.fit(x_train, y_train, epochs=25, verbose=1, validation_data=(x_test, y_test), callbacks=callbacks)

在刚刚创建的模型上调用.compile()是一个必需的步骤。必须指定几个参数:

  • 优化器(optimizer):运行梯度下降的组件。
  • 损失(loss):优化的指标。在本例中,选择交叉熵,就像上一章一样。
  • 评估指标(metrics):在训练过程进行评估的附加评估函数,以进一步查看有关模型性能(与损失不同,它们不在优化过程中使用)。

名为
sparse_categorical_crossentropy的Keras损失执行与categorical_crossentropy相同的交叉熵运算,但是前者直接将真值标签作为输入,而后者则要求真值标签先变成
独热(one-hot)编码。因此,使用sparse_...损失可以免于手动转换标签的麻烦。

  • tip:将'sgd'传递给Keras等同于传递tf.keras.optimizers.SGD()。前一个选项更易于阅读,而后一个选项则可以指定参数,如自定义学习率。传递给Keras方法的损失、评估指标和大多数参数也是如此。

然后,我们调用.fit()方法。它与另一个流行的机器学习库scikit-learn中所使用的接口非常相似。我们将训练5轮,这意味着将对整个训练数据集进行5次迭代。

请注意,我们将verbose设置为1。这将让我们获得一个进度条,其中包含先前选择的指标、损失和预计完成时间(Estimated Time of Arrival,ETA)。ETA是对轮次结束之前剩余时间的估计。进度条如图2-2所示。

4. 模型性能

如第1章中所述,你会注意到模型是过拟合的——即训练准确率大于测试准确率。如果对模型训练5轮,则最终在测试集上的准确率为97%。这比上一章(95%)高了约2个百分点。最先进的算法可达到99.79%的准确率。

我们遵循了三个主要步骤:

  1. 加载数据:在本例中,数据集已经可用。在未来的项目中,你可能需要其他的步骤来收集和清理数据。
  2. 创建模型:使用Keras可以让这一步骤变得容易——按顺序添加层即可定义模型的架构。然后,选择损失、优化器和评估指标进行监控。
  3. 训练模型:模型第一次运行效果很好。在更复杂的数据集上,通常需要在训练过程中微调参数。

借助TensorFlow的高级API——Keras,整个过程非常简单。在这个简单API的背后,该库隐藏了很多复杂操作。

关于作者:本杰明·普朗什(Benjamin Planche),他在计算机视觉和深度学习领域的全球多个研究实验室(法国LIRIS、日本三菱电机和德国西门子)工作超过5年。他的研究重点是针对工业应用使用更少的数据开发更智能的视觉系统。他还在在线平台(例如StackOverflow)上分享自己的知识和经验,或者创建有美感的演示系统。

艾略特·安德烈斯(Eliot Andres),深度学习和计算机视觉工程师。他在该领域拥有3年以上的经验,涉及银行、医疗、社交媒体和视频流等行业。他关注的是工业化,即通过将新技术应用于商业问题来实现价值。

本文摘编自《计算机视觉实战:基于TensorFlow 2》,经出版方授权发布。

推荐语:本书从计算机视觉和深度学习基础知识开始,教你如何从头开始构建神经网络。你将掌握一些让TensorFlow成为广泛使用的Al库的特性,以及直观的Keras接口,继而高效地构建、训练和部署CNN。

相关推荐

13个python常用库,提高你的开发能力

Python拥有大量封装好的功能模块和工具库,这些库广泛应用于数据分析、机器学习、Web开发、自动化等多个领域。库在Python的作用非常重要,利用库不仅能简化复杂的任务还能极大减少开发的时间。下面介...

TensorFlow中logits的含义解析(tensorflow2 lstm)

技术背景在机器学习尤其是深度学习领域,...

Python TensorFlow机器学习模型构建指南

以下是一篇关于使用Python和TensorFlow构建机器学习模型的详细指南,结合代码示例和关键概念解释:探索TensorFlow:构建强大的机器学习模型TensorFlow是由Goo...

TensorFlow和Pytorch中的音频增强

对于图像相关的任务,对图像进行旋转、模糊或调整大小是常见的数据增强的方法。因为图像的自身属性与其他数据类型数据增强相比,图像的数据增强是非常直观的,我们只需要查看图像就可以看到特定图像是如何转换的,...

使用TensorFlow进行深度学习模型训练

深度学习是一种机器学习的子领域,它通过模拟人脑神经网络的结构和运作方式,从而实现在大规模数据上进行复杂任务的训练和预测。TensorFlow是由Google开发的一款开源的深度学习框架,它为我们...

Keras各种Callbacks介绍(keras中backend常用)

1前言在tensorflow.keras中,callbacks能在fit、...

实例解析神经网络的工作原理(神经网络具体实例)

来源:算法进阶...

在浏览器中进行深度学习:TensorFlow.js (五)构建一个神经网络

这一次我们终于可以开始真正的深度学习了,从一个神经网络开始。神经网络(NeuralNetwork)是深度学习的基础,基本概念包括:神经元,层,反向传播等等。如果细讲我估计没有五到十篇文章那是讲不完的...

TensorFlow和Keras入门必读教程(tensorflow_core.keras)

导读:本文对TensorFlow的框架和基本示例进行简要介绍。作者:本杰明·普朗什(BenjaminPlanche)艾略特·安德烈斯(EliotAndres)来源:华章科技01TensorFlo...

Transformer系列:残差连接原理详细解析和代码论证

关键词:...

详解SoftMax多分类器(多分类svm代码)

常见的逻辑回归、SVM等常用于解决二分类问题,对于多个选项的分类问题,比如识别手写数字,它就需要10个分类,同样也可以用逻辑回归或SVM(只是需要多个二分类来组成多分类)。对于多分类的实现,我们还可以...

如何使用 TensorFlow 构建机器学习模型

在这篇文章中,我将逐步讲解如何使用TensorFlow创建一个简单的机器学习模型。TensorFlow是一个由谷歌开发的库,并在2015年开源,它能使构建和训练机器学习模型变得简单。...

芋道 ruoyi-vue-pro 踩的那些坑—前端编译打包问题

1、芋道ruoyi-vue-pro前端没有README.md,是可以理解,毕竟他们是以文档来创收的。但是对于非专业的前端人员非常的不友好。坑是一个接一个,很崩溃。我看项目有有个yarn.lock,...

Nginx部署Vue项目以及解决刷新页面404

在部署vue、react的前端项目时,经常会出现404的问题,一般是文件不是真正的存在,所以Nginx报404的错误一、打包项目1.在项目中的package.json上右键,点击Shownpm...

vue3管理后台,打包方便体积小,访问速度快,代码规整可读性强

项目介绍增强型vue3管理后台,打包方便体积小,访问速度快,代码规整可读性强。项目特点首页...

取消回复欢迎 发表评论: