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.rhkb.cn/news/8588.html

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

相关文章

在做题中学习(81):替换后的重复字符

解法:同向双指针————>滑动窗口 原因: 题目要求返回一个包含相同字母的最长字串,那就在数组中遍历找到,而又因为在暴力枚举时,会出现重复的情况,例如:在枚举以2为下标的子串时&…

67-《蓝金花》

蓝金花 蓝金花,又名蓝鲸花。是属于玄参科植物,分布于巴西。株高50~90公分,叶对生,长椭圆形,先端锐,细锯齿缘。春至秋季开花,腋生,花冠长管状,花瓣蓝紫色&…

AI 相机软件算法密码

你想过用生活中随手一拍的照片塑造不同风格的自己吗?从古风大片到田园乡村,各种风格随意拿捏,或者从旅游宝地一秒闪回办公地点...... 这些之前存在于头脑中的概念,现在已成为现实走进了我们的生活! 【图片来源于网络&…

互联网概述

互联网 是什么 网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。 有什么用 计算机网络:有许多计算机组成,要实现计算机之间的数据传输 数据传输目的地址 保证数据迅速可靠传输…

DAY02 final关键字、static关键字、接口

学习目标 描述final修饰的类的特点//是一个最终类不能被继承,是一个太监类 描述final修饰的方法的特点//是一个最终方法,可以被继承使用,但是不能被重写 描述final修饰的变量的特点//是一个常量,值不能改变局部变量:定义在方法中的变量基本数据类型:值不能改变引用数据类型(数…

Day27-【13003】短文,什么是栈?栈为何用在递归调用中?顺序栈和链式栈是什么?

文章目录 第三章栈和队列总览第一节栈概览栈的定义及其基本操作如何定义栈和栈的操作?合理的出栈序列个数如何计算?栈的两种存储方式及其实现?顺序栈及其实现,还有对应时间复杂度*、清空栈,初始化栈5、栈空&#xff0c…

Python GUI 开发 | PySide6 辅助工具简介

关注这个框架的其他相关笔记:Python GUI 开发 | PySide6 & PyQt6 学习手册-CSDN博客 在上一章中,我们介绍了如何搭建 PySide6 & PyQt6 的开发环境。在搭建环境的时候我们配置了几个几个快捷工具,很多小伙伴可能都不知道是干啥用的。那…

《十七》浏览器基础

浏览器:是安装在电脑里面的一个软件,能够将页面内容渲染出来呈现给用户查看,并让用户与网页进行交互。 常见的主流浏览器: 常见的主流浏览器有:Chrome、Safari、Firefox、Opera、Edge 等。 输入 URL,浏览…

Elasticsearch+kibana安装(简单易上手)

下载ES( Download Elasticsearch | Elastic ) 将ES安装包解压缩 解压后目录如下: 修改ES服务端口(可以不修改) 启动ES 记住这些内容 验证ES是否启动成功 下载kibana( Download Kibana Free | Get Started Now | Elastic ) 解压后的kibana目…

如何解压7z文件?8种方法(Win/Mac/手机/网页端)

7z 文件是一种高效的压缩文件格式,由 7 - Zip 软件开发者所采用。它运用独特的压缩算法,能显著缩小文件体积,便于存储与传输各类数据,像软件安装包、大型资料集等。但要使用其中内容,就必须解压,因为处于压…

最新-CentOS 7安装1 Panel Linux 服务器运维管理面板

CentOS 7安装1 Panel Linux 服务器运维管理面板 一、前言二、环境要求三、在线安装四、离线安装1.点击下面1 Panel官网链接访问下载,如未登录或注册,请登录/注册后下载2.使用将离线安装包上传至目标终端/tem目录下3.进入到/tem目录下解压离线安装包4.执行…

Linux初识——基本指令(2)

本文将继续从上篇末尾讲起,讲解我们剩下的基本指令 一、剩余的基本指令 1、mv mv指令是move(移动)的缩写,其功能为:1.剪切文件、目录。2.重命名 先演示下重命名,假设我想把当前目录下的di34改成dir5 那…

特种作业操作之低压电工考试真题

1.下面( )属于顺磁性材料。 A. 铜 B. 水 C. 空气 答案:C 2.事故照明一般采用( )。 A. 日光灯 B. 白炽灯 C. 压汞灯 答案:B 3.人体同时接触带电设备或线路中的两相导体时,电流从一相通过人体流…

国产编辑器EverEdit - 目录树

1 目录树 1.1 应用场景 在编辑文档时,一些关联文档可能都存放在相同的目录或者相近的目录,如果可以显示当前文件的目录树,则可以快速的在这些关联文件中切换。 1.2 使用方法 选择菜单查看 -> 停靠窗格 -> 目录树,在目录树…

MiniHack:为强化学习研究提供丰富而复杂的环境

人工智能咨询培训老师叶梓 转载标明出处 想要掌握如何将大模型的力量发挥到极致吗?叶老师带您深入了解 Llama Factory —— 一款革命性的大模型微调工具(限时免费)。 1小时实战课程,您将学习到如何轻松上手并有效利用 Llama Facto…

SET alter system reload

目录标题 alter system 只是 写 auto 文件SET & alter system1. **会话级别参数(Session-level parameters)**2. **系统级别参数(System-level parameters)**3. **某些特定的超级用户参数**4. **修改时生效的参数**总结&#…

苏州东菱振动试验仪器有限公司:振动试验设备行业的领军企业与发展历程

本文地址:http://www.aiqimao.com/zhidao/detail?id37943 苏州东菱振动试验仪器有限公司在振动试验仪器行业享有较高的知名度。公司致力于向众多行业供应优质振动试验设备,并提供专业服务。经过多年努力,该公司在市场上取得了显著成绩。以下…

使用EVE-NG-锐捷实现OSPF

一、OSPF基础知识 Open shortest Path First(OSPF)开放式最短路径优先协议 1.OSPF的关系状态 (1)邻居关系(TWO-WAY) 只发送hello包不发送LSA包(链路状态通告包) (2)邻接关系(FULL) OSPF设备与设备之间相互建立OSPF关系,初始为邻居关系(TWO-WAY)状态&#xff0…

C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)

前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。 欢迎投稿、推荐…

戴尔电脑设置u盘启动_戴尔电脑设置u盘启动多种方法

最近有很多网友问,戴尔台式机怎么设置u盘启动,特别是近两年的戴尔台式机比较复杂,有些网友不知道怎么设置,其实设置u盘启动有两种方法,下面小编教大家戴尔电脑设置u盘启动方法。 戴尔电脑设置u盘启动方法一、戴尔进入b…