当前位置: 首页 > news >正文

python3+TensorFlow 2.x 基础学习(一)

目录

TensorFlow 2.x基础

1、安装 TensorFlow 2.x

2、TensorFlow 2.x 基础概念

2、1 Eager Execution

2、2 TensorFlow 张量(Tensor)

3、使用Keras构建神经网络模型

3、1 构建 Sequential 模型

3、2 编译模型

1、Optimizer(优化器)

2、Loss(损失函数)

3、Metrics(评估指标)

3、3 训练模型

3、4 评估模型

3、5 预测

4、使用 TensorFlow 2.x 实现自定义训练循环

5、TensorFlow 2.x 高级功能

5、1 TensorFlow Dataset(数据管道)

5、2 TensorFlow Serving

5、3 TensorFlow Lite(模型优化和部署)

总结


TensorFlow 2.x基础

TensorFlow 2.x 是一个广泛使用的深度学习框架,特别适用于神经网络的构建和训练。与之前的版本相比,TensorFlow 2.x 提供了更加简洁和易用的 API,集成了 Keras 作为高层 API,并支持动态图(Eager Execution)。

1、安装 TensorFlow 2.x

首先,确保你已经安装了 TensorFlow 2.x。(Python 3.11.4)可以通过以下命令来安装:pip install tensorflow 查看:pip show tensorflow
Name: tensorflow
Version: 2.18.0

2、TensorFlow 2.x 基础概念

2、1 Eager Execution

TensorFlow 2.x 默认启用 Eager Execution,这意味着操作是即时执行的,计算结果会立刻返回,而不需要构建图。这样使得调试更加容易,代码更具可读性。

import tensorflow as tf# 启用 Eager Execution
tf.compat.v1.enable_eager_execution()# 创建一个张量并执行操作
a = tf.constant([1, 2, 3])
b = tf.constant([4, 5, 6])c = a + b  # 即时执行
print(c)  # 输出结果: tf.Tensor([5 7 9], shape=(3,), dtype=int32)

2、2 TensorFlow 张量(Tensor)

TensorFlow 的核心数据结构是张量(tensor)。张量类似于 NumPy 数组,可以存储数据并在 TensorFlow 图中传递。你可以创建不同类型的张量:

# 创建张量
t1 = tf.constant([1, 2, 3])  # 一维张量
t2 = tf.constant([[1, 2], [3, 4]])  # 二维张量
# 张量操作
t3 = t1 + 5  # 所有元素加5
print(t3)  # tf.Tensor([6 7 8], shape=(3,), dtype=int32)

3、使用Keras构建神经网络模型

TensorFlow 2.x 中,Keras 成为默认的高级API。通过Keras可以快速构建和训练神经网络。

3、1 构建 Sequential 模型

tf.keras.models.Sequential 是TensorFlow Keras API 中用于构建模型的一种简单方式。它允许你按顺序堆叠多个层(layers),以构建深度学习模型,可以通过 add 方法向模型中添加层。常用的层包括全连接层(Dense)、卷积层(Conv2D)、池化层(MaxPooling2D)等

from tensorflow.keras import layers, models
# 创建一个简单的 Sequential 模型
model = models.Sequential([#有 128 个神经元,激活函数为 ReLUlayers.Dense(128, activation='relu', input_shape=(784,)),  # 输入层784 维的向量layers.Dropout(0.2),  # Dropout 层丢弃 20% 的神经元,防止过拟合layers.Dense(10, activation='softmax')  # 输出层10 个神经元,激活函数为 softmax用于多分类
])# 打印模型概述
model.summary()

3、2 编译模型

在构建模型后,需要编译它,选择优化器、损失函数和评估指标:在深度学习中,optimizer、loss 和 metrics 是模型编译时的重要参数。下面将详细解释这三个参数的含义及其在模型训练中的作用。

1、Optimizer(优化器)

optimizer='adam' 指定了使用 Adam 优化器。优化器的主要作用是更新模型的权重,以最小化损失函数。Adam 优化器结合了动量和自适应学习率的优点,通常在许多任务中表现良好。

Adam 优化器的特点:自适应学习率:根据每个参数的历史梯度动态调整学习率。适合大规模数据和高维参数。通常收敛速度快,效果好。

2、Loss(损失函数)

loss='sparse_categorical_crossentropy' 指定了使用稀疏分类交叉熵作为损失函数。损失函数用于衡量模型预测值与真实值之间的差距。

稀疏分类交叉熵的特点:适用于多分类问题,且标签是整数形式(而不是独热编码)。计算方式是对每个样本的预测概率与真实标签的交叉熵进行求和。适合处理类别较多的分类问题。

3、Metrics(评估指标)

metrics=['accuracy'] 指定了在训练和评估过程中使用的评估指标。在这里,使用的是准确率(accuracy它表示模型预测正确的样本占总样本的比例。

准确率的特点:简单易懂,常用于分类问题。适合类别均衡的数据集,但在类别不均衡时可能会产生误导。

model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])

3、3 训练模型

训练模型时,需要指定训练数据、标签、批量大小、训练的轮数(epochs)等参数:

# 假设我们已经加载了 MNIST 数据集
(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data()# 预处理数据
train_images = train_images.reshape((train_images.shape[0], 784)).astype('float32') / 255
test_images = test_images.reshape((test_images.shape[0], 784)).astype('float32') / 255# 训练模型
history = model.fit(train_images, train_labels, epochs=5, batch_size=64, validation_data=(test_images, test_labels))
  • epochs:表示整个训练数据集将被训练的次数。设置为5模型将遍历整个训练数据集5次

  • batch_size:表示每次迭代中用于训练的样本数量。选择合适的 batch_size对模型的训练速度和性能有很大影响。常见的选择有32、64、128等,具体选择可以根据你的数据集大小和计算资源来决定。

3、4 评估模型

训练完成后,可以通过 evaluate 函数来评估模型在测试集上的表现:

test_loss, test_acc = model.evaluate(test_images, test_labels)
print(f'Test accuracy: {test_acc}')

model.evaluate(test_images, test_labels):这个函数用于评估模型在测试数据集上的表现。
test_images 是测试集的输入数据,通常是图像数据。
test_labels 是对应的标签,表示每个测试样本的真实类别。
该函数返回两个值:test_loss 和 test_acc,分别表示测试集上的损失值和准确率。print(f'Test accuracy: {test_acc}'):

准确率 (Accuracy):正确预测的样本占总样本的比例。
精确率 (Precision):正确预测为正类的样本占所有预测为正类的样本的比例。
召回率 (Recall):正确预测为正类的样本占所有实际为正类的样本的比例。
F1-score:精确率和召回率的调和平均数。

3、5 预测

使用训练好的模型进行预测:

predictions = model.predict(test_images)
print(predictions[0])  # 打印第一个测试样本的预测结果

4、使用 TensorFlow 2.x 实现自定义训练循环

虽然 Keras 提供了便捷的接口,但有时我们需要更多控制,特别是需要自定义训练循环时。在 TensorFlow 2.x 中,你可以轻松实现自定义的训练循环。

# 自定义训练循环
for epoch in range(5):  # 训练5轮for step, (images, labels) in enumerate(train_dataset):with tf.GradientTape() as tape:predictions = model(images, training=True)loss = tf.losses.sparse_categorical_crossentropy(labels, predictions)# 计算梯度并更新模型参数grads = tape.gradient(loss, model.trainable_variables)optimizer.apply_gradients(zip(grads, model.trainable_variables))

5、TensorFlow 2.x 高级功能

5、1 TensorFlow Dataset(数据管道)

tf.data API 用于构建高效的数据管道,尤其是在处理大规模数据时。可以创建自定义的数据集、批处理和预处理操作。

# 加载数据集并进行预处理
train_dataset = tf.data.Dataset.from_tensor_slices((train_images, train_labels))
train_dataset = train_dataset.shuffle(10000).batch(64)# 迭代数据
for images, labels in train_dataset:print(images.shape, labels.shape)

tf.data.Dataset.from_tensor_slices((train_images, train_labels)):函数将训练图像和标签转换为一个 tf.data.Dataset 对象。train_images 是一个包含训练图像的张量,train_labels 是对应的标签这个方法会将每个图像和其对应的标签配对,形成一个数据集。

train_dataset.shuffle(10000):这个方法用于随机打乱数据集中的样本,以提高模型的泛化能力。参数 10000 指定了缓冲区的大小,表示在打乱时会随机选择最多10000个样本进行打乱。这个值可以根据你的数据集大小进行调整。

batch(64):这个方法将数据集分成多个批次,每个批次包含64个样本。在训练过程中,模型会一次处理一个批次的数据,这样可以提高训练效率并减少内存占用。

5、2 TensorFlow Serving

TensorFlow Serving 是一个为生产环境提供的高效部署服务,它可以帮助你在服务器端进行实时的模型推理。你可以通过 TensorFlow Serving 部署训练好的模型,并通过 API 进行访问。

# 启动 TensorFlow Serving
docker run -p 8501:8501 --name=tf_serving_mnist \--mount type=bind,source=/path/to/saved_model,destination=/models/mnist \-e MODEL_NAME=mnist -t tensorflow/serving

5、3 TensorFlow Lite(模型优化和部署)

TensorFlow Lite 允许将训练好的模型转换为适用于移动设备和边缘设备的格式。通过量化和剪枝等技术,TensorFlow Lite 可以显著减少模型的大小和计算需求。

# 使用 TensorFlow Lite 转换模型
tflite_convert --saved_model_dir=/path/to/saved_model --output_file=model.tflite

总结

TensorFlow 2.x 是一个功能强大且灵活的深度学习框架,它集成了许多先进的功能,如 Keras、高效的数据处理 API(tf.data)、Eager Execution 和自动化的模型优化工具。通过简洁的 API 和强大的性能,TensorFlow 2.x 成为深度学习开发人员的首选框架之一。

相关文章:

python3+TensorFlow 2.x 基础学习(一)

目录 TensorFlow 2.x基础 1、安装 TensorFlow 2.x 2、TensorFlow 2.x 基础概念 2、1 Eager Execution 2、2 TensorFlow 张量(Tensor) 3、使用Keras构建神经网络模型 3、1 构建 Sequential 模型 3、2 编译模型 1、Optimizer(优化器&a…...

《活出人生的厚度》

《活出人生的厚度》可以从不同角度来理解和实践,以下为你提供一些拓展内容: ### 不断学习与自我提升 - **持续知识更新**:保持对新知识的渴望,利用各种渠道学习,如在线课程、学术讲座、行业研讨会等。例如&#xff0c…...

安装 docker 详解

在平常的开发工作中,我们经常需要部署项目。随着 Docker 容器的出现,大大提高了部署效率。Docker 容器包含了应用程序运行所需的所有依赖,避免了换环境运行问题。可以在短时间内创建、启动和停止容器,大大提高了应用的部署速度&am…...

【Rust自学】16.3. 共享状态的并发

喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 16.3.1. 使用共享来实现并发 还记得Go语言有一句名言是这么说的:Do not commun…...

开发者交流平台项目部署到阿里云服务器教程

本文使用PuTTY软件在本地Windows系统远程控制Linux服务器;其中,Windows系统为Windows 10专业版,Linux系统为CentOS 7.6 64位。 1.工具软件的准备 maven:https://archive.apache.org/dist/maven/maven-3/3.6.1/binaries/apache-m…...

【2024年华为OD机试】 (B卷,100分)- 乘坐保密电梯(JavaScriptJava PythonC/C++)

一、问题描述 问题描述 我们需要从0楼到达指定楼层m,乘坐电梯的规则如下: 给定一个数字序列,每次根据序列中的数字n,上升n层或下降n层。前后两次的方向必须相反,且首次方向向上。必须使用序列中的所有数字,不能只使用一部分。目标是到达指定楼层m,如果无法到达,则给出…...

maven的打包插件如何使用

默认的情况下,当直接执行maven项目的编译命令时,对于结果来说是不打第三方包的,只有一个单独的代码jar,想要打一个包含其他资源的完整包就需要用到maven编译插件,使用时分以下几种情况 第一种:当只是想单纯…...

solidity高阶 -- 线性继承

Solidity是一种面向合约的高级编程语言,用于编写智能合约。在Solidity中,多线继承是一个强大的特性,允许合约从多个父合约继承属性和方法。本文将详细介绍Solidity中的多线继承,并通过不同的实例展示其使用方法和注意事项。 在Sol…...

国内外大语言模型领域发展现状与预期

在数字化浪潮中,大语言模型已成为人工智能领域的关键力量,深刻影响着各个行业的发展轨迹。下面我们将深入探讨国内外大语言模型领域的发展现状以及未来预期。 一、发展现状 (一)国外进展 美国的引领地位:OpenAI 的 …...

【Leetcode 热题 100】416. 分割等和子集

问题背景 给你一个 只包含正整数 的 非空 数组 n u m s nums nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 数据约束 1 ≤ n u m s . l e n g t h ≤ 200 1 \le nums.length \le 200 1≤nums.length≤200 1 ≤ n u m s [ i ] ≤ …...

C语言------数组从入门到精通

1.一维数组 目标:通过思维导图了解学习一维数组的核心知识点: 1.1定义 使用 类型名 数组名[数组长度]; 定义数组。 // 示例: int arr[5]; 1.2一维数组初始化 数组的初始化可以分为静态初始化和动态初始化两种方式。 它们的主要区别在于初始化的时机和内存分配的方…...

物管系统赋能智慧物业管理提升服务质量与工作效率的新风潮

内容概要 在当今的物业管理领域,物管系统的崛起为智慧物业管理带来了新的机遇和挑战。这些先进的系统能够有效整合各类信息,促进数字化管理,从而提升服务质量和工作效率。通过物管系统,物业管理者可以实时查看和分析各种数据&…...

2024年记 | 凛冬将至

放弃幻想,准备斗争! 考研or就业? 上大学以来,考研上名校在我的心里一直是一颗种子,2024年初,当时的想法是考研和就业两手抓。买了张宇的高数现代,想要死磕! 也记了挺多笔记... 如果…...

MySQL数据导入与导出

在现代软件开发中,数据管理是一个重要的核心环节,而数据库则是进行数据管理的主要工具。MySQL 作为一款开源的关系型数据库管理系统,被广泛应用于企业和个人开发项目中。对于学习编程的初学者或是自学者来说,掌握 MySQL 的基本操作尤为重要,尤其是数据的导入与导出功能。这…...

NoSQL与SQL比较

1.认识NoSQL NoSql可以翻译做Not Only Sql(不仅仅是SQL),或者是No Sql(非Sql的)数据库。是相对于传统关系型数据库而言,有很大差异的一种特殊的数据库,因此也称之为非关系型数据库。 1.1.结构…...

Ceph:关于Ceph 中使用 RADOS 块设备提供块存储的一些笔记整理(12)

写在前面 准备考试,整理 ceph 相关笔记博文内容涉及使用 RADOS 块设备提供块存储理解不足小伙伴帮忙指正对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波…...

Android SystemUI——最近任务列表启动(十八)

前面分析了初始化涉及到的关键类,系统启动后会启动 SystemUI 进程,然后进行一系列初始化,接下来看一下进入 Recents 的流程。我们主要分析最近任务应用列表的启动与显示。 一、最近任务启动 关于手势或 Key 按键触发这一块逻辑处理入口都是在 PhoneWindowManager,咱们从 R…...

数据结构课程设计(三)构建决策树

3 决策树 3.1 需求规格说明 【问题描述】 ID3算法是一种贪心算法,用来构造决策树。ID3算法起源于概念学习系统(CLS),以信息熵的下降速度为选取测试属性的标准,即在每个节点选取还尚未被用来划分的具有最高信息增益的…...

从ChatGPT热潮看智算崛起

2025年1月7日,科智咨询发布《2025年IDC产业七大发展趋势》,其中提到“ChatGPT开启生成式AI热潮,智能算力需求暴涨,算力供给结构发生转变”。 【图片来源于网络,侵删】 为何会以ChatGPT发布为节点呢?咱们一起…...

基于PyQt设计的智能停车管理系统

文章目录 一、前言1.1 项目介绍【1】项目开发背景【2】设计实现的功能【3】设计意义【4】国内外研究现状【6】摘要1.2 设计思路1.3 系统功能总结1.4 开发工具的选择【1】VSCODE【2】python【3】ptqt【4】HyperLPR31.5 参考文献二、安装Python环境1.1 环境介绍**1.2 Python版本介…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...

jdbc查询mysql数据库时,出现id顺序错误的情况

我在repository中的查询语句如下所示&#xff0c;即传入一个List<intager>的数据&#xff0c;返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致&#xff0c;会导致返回的id是从小到大排列的&#xff0c;但我不希望这样。 Query("SELECT NEW com…...

怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)

+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...

GB/T 43887-2024 核级柔性石墨板材检测

核级柔性石墨板材是指以可膨胀石墨为原料、未经改性和增强、用于核工业的核级柔性石墨板材。 GB/T 43887-2024核级柔性石墨板材检测检测指标&#xff1a; 测试项目 测试标准 外观 GB/T 43887 尺寸偏差 GB/T 43887 化学成分 GB/T 43887 密度偏差 GB/T 43887 拉伸强度…...

iOS 项目怎么构建稳定性保障机制?一次系统性防错经验分享(含 KeyMob 工具应用)

崩溃、内存飙升、后台任务未释放、页面卡顿、日志丢失——稳定性问题&#xff0c;不一定会立刻崩&#xff0c;但一旦积累&#xff0c;就是“上线后救不回来的代价”。 稳定性保障不是某个工具的功能&#xff0c;而是一套贯穿开发、测试、上线全流程的“观测分析防范”机制。 …...

代理服务器-LVS的3种模式与调度算法

作者介绍&#xff1a;简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 我们上一章介绍了Web服务器&#xff0c;其中以Nginx为主&#xff0c;本章我们来讲解几个代理软件&#xff1a…...

qt 双缓冲案例对比

双缓冲 1.双缓冲原理 单缓冲&#xff1a;在paintEvent中直接绘制到屏幕&#xff0c;绘制过程被用户看到 双缓冲&#xff1a;先在redrawBuffer绘制到缓冲区&#xff0c;然后一次性显示完整结果 代码结构 单缓冲&#xff1a;所有绘制逻辑在paintEvent中 双缓冲&#xff1a;绘制…...