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 成为深度学习开发人员的首选框架之一。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/67001.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI News(1/21/2025):OpenAI 安全疏忽:ChatGPT漏洞引发DDoS风险/OpenAI 代理工具即将发布

1、OpenAI 的安全疏忽:ChatGPT API 漏洞引发DDoS风险 德国安全研究员 Benjamin Flesch 发现了一个严重的安全漏洞:攻击者可以通过向 ChatGPT API 发送一个 HTTP 请求,利用 ChatGPT 的爬虫对目标网站发起 DDoS 攻击。该漏洞源于 OpenAI 在处理…

openlava/LSF 用户组管理脚本

背景 在openlava运维中经常需要自动化一些常规操作,比如增加用户组以及组成员、删除用户组成员、删除用户组等。而openlava的配置文件需要手动修改,然后再通过badmin reconfig激活配置。因此开发脚本将手工操作自动化就很有必要。 通过将脚本中的User…

LLMs的星辰大海:大语言模型的前世今生

文章目录 一. LLM 的演进:从规则到智能的跃迁 💫1.1 语言模型的蹒跚起步 👶1.2 RNN 与 LSTM:序列建模的尝试 🧐1.3 Transformer 的横空出世:自注意力机制的革命 💥1.4 LLM :从预测到…

7-Zip高危漏洞CVE-2025-0411:解析与修复

7-Zip高危漏洞CVE-2025-0411:解析与修复 免责声明 本系列工具仅供安全专业人员进行已授权环境使用,此工具所提供的功能只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利…

数据结构(精讲)----树(应用篇)

特性: 什么是树: 树(Tree)是(n>0)个节点的有限集合T,它满足两个条件: (1) 有且仅有一个特定的称为根(Root)的节点。 (2) 其余的节点可以分为m(m≥0)个互不相交的有限集合T1、…

【动态规划】--- 斐波那契数模型

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: 算法Journey 🏠 第N个泰波那契数模型 📌 题目解析 第N个泰波那契数 题目要求的是泰波那契数,并非斐波那契数。 &…

如何确保Spring单例Bean在高并发环境下的安全性?

在Spring中,单例Bean就像是一个“公共的水杯”,整个应用程序中的所有线程都会共享这一个实例。在大部分情况下,这没什么问题,但如果多个线程同时想要修改这个“水杯”里的内容,就可能会出现问题了。 想象一下&#xff…

期刊审稿意见回复的LaTeX模板分享

下载网址 https://github.com/NeuroDong/Latex_for_review_comments 效果展示 分享内容 在学术写作过程中,回复审稿意见是一个重要且繁琐的环节。由于审稿人众多,使用Word进行排版往往效率低下。为了提高效率,我在网上找到了一个LaTeX模板…

Vue 3 30天精进之旅:Day 03 - Vue实例

引言 在前两天的学习中,我们成功搭建了Vue.js的开发环境,并创建了我们的第一个Vue项目。今天,我们将深入了解Vue的核心概念之一——Vue实例。通过学习Vue实例,你将理解Vue的基础架构,掌握数据绑定、模板语法和指令的使…

在Vue中,<img> 标签的 src 值

1. 直接指定 src 的值&#xff08;适用于网络图片&#xff09; 如果你使用的是网络图片&#xff08;即图片的URL是完整的HTTP或HTTPS链接&#xff09;&#xff0c;可以直接指定 src 的值&#xff1a; vue 复制 <template><div><img src"https://exampl…

Spring Boot/MVC

一、Spring Boot的创建 1.Spring Boot简化Spring程序的开发,使用注解和配置的方式开发 springboot内置了tomact服务器 tomact:web服务器,默认端口号8080,所以访问程序使用8080 src/main/java:Java源代码 src/main/resource:静态资源或配置文件,存放前端代码(js,css,html) s…

Spring--SpringMVC的调用流程

一.简介 1.1主要作用 SSM框架构建起单的技术栈需求&#xff01;其中的SpringMVC负责表述层&#xff08;控制层&#xff09;实现简化&#xff01; 最终总结&#xff1a; 1. 简化前端参数接收( 形参列表 )2. 端数据响应(返回值)1.2核心组件和调用流程 Spring MVC与许多其他Web…

C#集合排序的三种方法(List<T>.Sort、LINQ 的 OrderBy、IComparable<T> 接口)

见过不少人、经过不少事、也吃过不少苦&#xff0c;感悟世事无常、人心多变&#xff0c;靠着回忆将往事串珠成链&#xff0c;聊聊感情、谈谈发展&#xff0c;我慢慢写、你一点一点看...... 1、使用 List<T>.Sort 方法与自定义比较器 public class Person{public string …

从ChatGPT热潮看智算崛起

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

Frida使用指南(三)- Frida-Native-Hook

1.Process、Module、Memory基础 1.Process Process 对象代表当前被Hook的进程,能获取进程的信息,枚举模块,枚举范围等 2.Module Module 对象代表一个加载到进程的模块(例如,在 Windows 上的 DLL,或在 Linux/Android 上的 .so 文件), 能查询模块的信息,如模块的基址、名…

Electron学习笔记,安装环境(1)

1、支持win7的Electron 的版本是18&#xff0c;这里node.js用的是14版本&#xff08;node-v14.21.3-x86.msi&#xff09;云盘有安装包 Electron 18.x (截至2023年仍在维护中): Chromium: 96 Node.js: 14.17.0 2、安装node环境&#xff0c;node-v14.21.3-x86.msi双击运行选择安…

漏洞修复:Apache Tomcat 安全漏洞(CVE-2024-50379) | Apache Tomcat 安全漏洞(CVE-2024-52318)

文章目录 引言I Apache Tomcat 安全漏洞(CVE-2024-50379)漏洞描述修复建议升级Tomcat教程II Apache Tomcat 安全漏洞(CVE-2024-52318)漏洞描述修复建议III 安全警告引言 解决方案:升级到最新版Tomcat https://blog.csdn.net/z929118967/article/details/142934649 service in…

提示词的艺术 ---- AI Prompt 进阶(提示词框架)

提示词的艺术 ---- AI Prompt 进阶&#xff08;提示词框架&#xff09; 写在前面 上周发布了一篇《提示词的艺术----AI Prompt撰写指南》&#xff0c;旨在帮助读者理解提示词的作用&#xff0c;以及简单的提示词撰写指南。本篇作为进阶内容&#xff0c;将给出常用的提示词框架…

PyQt4 的图片切割编辑器

一、 编辑器功能明确 允许用户加载图片、选择切割模式、对切割后的图片片段进行操作&#xff08;如移动、复制、粘贴、删除等&#xff09;&#xff0c;并支持撤销和重做操作。 环境&#xff1a;Py2.7 PyQt 4.11 二、导入模块介绍 sys: 用于访问与 Python 解释器强相关的变…

[MySQL]数据库表内容的增删查改操作大全

目录 一、增加表数据 1.全列插入与指定列插入 2.多行数据插入 3.更新与替换插入 二、查看表数据 1.全列查询与指定列查询 2.查询表达式字段 3.为查询结果起别名 4.结果去重 5.WHERE条件 6.结果排序 7.筛选分页结果 8.插入查询的结果 9.group by子句 三、修改表数…