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

Python TensorFlow库【深度学习框架】全面讲解与案例

一、TensorFlow 基础知识

1. 核心概念

  • 张量 (Tensor): 多维数组,是 TensorFlow 的基本数据单位(标量、向量、矩阵等)。
  • 计算图 (Graph): 早期版本中的静态图机制(TF2.x 默认启用动态图)。
  • 会话 (Session): 在 TF1.x 中用于执行计算图(TF2.x 中已弃用)。

2. 基本操作

import tensorflow as tf# 创建张量
a = tf.constant([[1, 2], [3, 4]])  # 形状 (2, 2)
b = tf.constant([[5, 6], [7, 8]])# 张量运算
c = tf.add(a, b)        # 逐元素加法
d = tf.matmul(a, b)     # 矩阵乘法print("加法结果:\n", c.numpy())
print("矩阵乘法结果:\n", d.numpy())

二、高级用法

1. Keras API 快速建模

from tensorflow.keras import layers, models# 构建顺序模型
model = models.Sequential([layers.Dense(64, activation='relu', input_shape=(784,)),layers.Dropout(0.2),layers.Dense(10, activation='softmax')
])# 编译模型
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])# 打印模型结构
model.summary()

2. 自定义训练循环

# 自定义损失函数和训练步骤
@tf.function
def train_step(inputs, labels):with tf.GradientTape() as tape:predictions = model(inputs)loss = tf.keras.losses.sparse_categorical_crossentropy(labels, predictions)gradients = tape.gradient(loss, model.trainable_variables)optimizer.apply_gradients(zip(gradients, model.trainable_variables))return loss

三、深入进阶

1. 混合精度训练

# 启用混合精度策略
from tensorflow.keras.mixed_precision import set_global_policy
set_global_policy('mixed_float16')# 模型会自动使用混合精度
model = models.Sequential([layers.Dense(1024, activation='relu'),  # 自动转为 float16layers.Dense(10, dtype='float32')       # 输出层保持 float32
])

2. 分布式训练

# 多GPU训练策略
strategy = tf.distribute.MirroredStrategy()with strategy.scope():model = models.Sequential([...])model.compile(...)model.fit(train_dataset, epochs=10)

四、完整案例

案例1:图像分类(CNN)

# 加载数据
(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data()# 预处理
train_images = train_images.reshape((60000, 28, 28, 1)).astype('float32') / 255# 构建CNN模型
model = models.Sequential([layers.Conv2D(32, (3,3), activation='relu', input_shape=(28,28,1)),layers.MaxPooling2D((2,2)),layers.Flatten(),layers.Dense(10, activation='softmax')
])# 训练配置
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])# 训练模型
history = model.fit(train_images, train_labels,epochs=5,validation_split=0.2)# 评估模型
test_loss, test_acc = model.evaluate(test_images, test_labels)
print(f'Test accuracy: {test_acc}')

五、学习路径建议

1. 分阶段学习

  1. 基础阶段(2周):

    • 张量操作
    • 全连接网络
    • Keras API 基础
  2. 中级阶段(3周):

    • CNN/RNN实现
    • 数据管道(tf.data)
    • 模型保存/加载
  3. 高级阶段(4周):

    • 自定义训练循环
    • 分布式训练
    • TensorFlow Serving 部署

2. 推荐资源

  • 官方文档:tensorflow.org
  • 实战书籍:《Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow》
  • 社区:Stack Overflow(标签 tensorflow)、GitHub 开源项目

六、关键代码示例

自定义层示例

class CustomDense(layers.Layer):def __init__(self, units=32):super().__init__()self.units = unitsdef build(self, input_shape):# 初始化权重self.w = self.add_weight(shape=(input_shape[-1], self.units),initializer="random_normal",trainable=True,)self.b = self.add_weight(shape=(self.units,), initializer="zeros", trainable=True)def call(self, inputs):# 前向传播计算return tf.matmul(inputs, self.w) + self.b# 使用自定义层
model = models.Sequential([CustomDense(64),layers.ReLU(),CustomDense(10)
])

六、模型部署与生产化

1. 模型保存与加载

# 保存整个模型(架构+权重+优化器状态)
model.save('my_model.keras')  # 或使用 SavedModel 格式# 加载模型
loaded_model = tf.keras.models.load_model('my_model.keras')# 仅保存权重
model.save_weights('model_weights.weights.h5')# 仅保存架构
with open('model_architecture.json', 'w') as f:f.write(model.to_json())

2. TensorFlow Serving 部署

# 安装 TensorFlow Serving
echo "deb [arch=amd64] http://storage.googleapis.com/tensorflow-serving-apt stable tensorflow-model-server tensorflow-model-server-universal" | sudo tee /etc/apt/sources.list.d/tensorflow-serving.list
curl https://storage.googleapis.com/tensorflow-serving-apt/tensorflow-serving.release.pub.gpg | sudo apt-key add -
sudo apt-get update && sudo apt-get install tensorflow-model-server# 启动服务
tensorflow_model_server \--rest_api_port=8501 \--model_name=my_model \--model_base_path=/path/to/saved_model

七、性能优化技巧

1. 使用 tf.data 构建高效数据管道

# 从内存数据创建 Dataset
dataset = tf.data.Dataset.from_tensor_slices((images, labels)

相关文章:

Python TensorFlow库【深度学习框架】全面讲解与案例

一、TensorFlow 基础知识 1. 核心概念 张量 (Tensor): 多维数组,是 TensorFlow 的基本数据单位(标量、向量、矩阵等)。计算图 (Graph): 早期版本中的静态图机制(TF2.x 默认启用动态图)。会话 (Session): 在 TF1.x 中用于执行计算图(TF2.x 中已弃用)。2. 基本操作 impo…...

火影bug,未保证短时间数据一致性,拿这个例子讲一下Redis

本文只拿这个游戏的bug来举例Redis,如果有不妥的地方,联系我进行删除 描述:今天在高速上打火影(有隧道,有时候会卡),发现了个bug,我点了两次-1000的忍玉(大概用了1千七百…...

Power Query 是 Excel 和 Power BI 中强大的数据获取、转换和加载工具

Power Query 链接是什么 Power Query 是 Excel 和 Power BI 中强大的数据获取、转换和加载工具。Power Query 链接指的是在 Excel 或 Power BI 里通过 Power Query 建立的与外部数据源的连接。这些数据源可以是各种类型,像文本文件(CSV、TXT&#xff09…...

探索元生代:ComfyUI 工作流与计算机视觉的奇妙邂逅

目录 一、引言 二、蓝耘元生代和 ComfyUI 工作流初印象 (一)蓝耘元生代平台简介 (二)ComfyUI 工作流创建是啥玩意儿 三、计算机视觉是个啥 (一)计算机视觉的基本概念 (二)计算…...

Unity-Shader详解-其五

关于Unity的Shader部分的基础知识其实已经讲解得差不多了,今天我们来一些实例分享: 溶解 效果如下: 代码如下: Shader "Chapter8/chapter8_1" {Properties{// 定义属性[NoScaleOffset]_Albedo("Albedo", 2…...

【Java 专题补充】流程控制语句

流程控制语句是用来控制程序中各语句执行顺序的语句,是程序中既基本又非常关键的部分。流程控制语句可以把单个的语句组合成有意义的、能完成一定功能的小逻辑模块。最主要的流程控制方式是结构化程序设计中规定的三种基本流程结构。 1.1 结构化程序设计的三种基本流…...

恶心的win11更新DIY 设置win11更新为100年

‌打开注册表编辑器‌:按下Win R键,输入regedit,然后按回车打开注册表编辑器。‌12‌导航到指定路径‌:在注册表编辑器中,依次展开HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings‌新建DWORD值‌&…...

【ArcGIS微课1000例】0146:将多个文件夹下的影像移动到一个目标文件夹(以Landscan数据为例)

本文讲述将多个文件夹下的影像移动到一个目标文件夹,便于投影变换、裁剪等操作。 文章目录 一、数据准备二、解压操作三、批量移动四、查看效果五、ArcGIS操作一、数据准备 全球人口数据集Landscan2000-2023如下所示,每年数据位一个压缩包: 二、解压操作 首先将其解压,方…...

【redis】分片方案

Redis分片(Sharding)是解决单机性能瓶颈的核心技术,其本质是将数据分散存储到多个Redis节点(实例)中,每个实例将只是所有键的一个子集,通过水平扩展提升系统容量和性能。 分片的核心价值 性能提…...

springboot+mysql+element-plus+vue完整实现汽车租赁系统

目录 一、项目介绍 二、项目截图 1.项目结构图 三、系统详细介绍 管理后台 1.登陆页 2.管理后台主页 3.汽车地点管理 4.汽车类别 5.汽车品牌 6.汽车信息 7.用户管理 8.举报管理 9.订单管理 10.轮播图管理 11.交互界面 12.图表管理 汽车租赁商城 1.首页 2.汽…...

Linux第四节:进程控制

一、进程创建 1.1 fork函数 1. fork函数有两个返回值问题 返回的本质就是写入!所以,谁先返回,谁就先写入id,因为进程具有独立性,会发生写时拷贝,父进程和子进程各自指向return语句。 2. fork返回后&#x…...

Qt 编译 sqldrivers之psql

编译postgres pgsql驱动 下载驱动源码修改配置文件编译 下载驱动源码 // 源代码下载 https://download.qt.io/archive/qt/5.15/5.15.2/submodules/驱动目录:qtbase-everywhere-src-5.15.2\src\plugins\sqldrivers 修改配置文件 打开pro文件 右键点击添加库 此处的为debu…...

382_C++_在用户会话结束时,检查是否有其他会话仍然来自同一个客户端 IP 地址,没有连接状态设置为断开,否则为连接

之前出现的问题:重启管理机,工作机上面热备连接状态显示未连接 (此时是有一个工作机连接管理机的),所以正常应该是连接状态解决:根因分析: 重启管理机后,管理机给过来的cookie是空的,导致工作机同时存在两个管理机的session,在其中一个超时后,调用回调函数通知会话断开…...

RViz(机器人可视化工具)的配置文件(moveitcpp)

1. Panels(面板设置) 面板是RViz界面中的各个功能区域,用于显示和操作不同的数据。 Displays(显示面板) Class: rviz_common/Displays 指定面板的类型,这里是显示面板。 Help Height: 78 帮助区域的高度…...

Redis中6种缓存更新策略

Redis作为一款高性能的内存数据库,已经成为缓存层的首选解决方案。然而,使用缓存时最大的挑战在于保证缓存数据与底层数据源的一致性。缓存更新策略直接影响系统的性能、可靠性和数据一致性,选择合适的策略至关重要。 本文将介绍Redis中6种缓…...

如何使用极狐GitLab 软件包仓库功能托管 terraform?

极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 Terraform 模块库 (BASIC ALL) 基础设施仓库和 Terraform 模块仓库合并到单个 Terraform 模块仓库功能引入于极狐GitLab 15.1…...

观测云:安全、可信赖的监控观测云服务

引言 近日,“TikTok 遭欧盟隐私监管机构调查并处以 5.3 亿欧元”一案,再次引发行业内对数据合规等话题的热议。据了解,仅 2023 年一年就产生了超过 20 亿美元的 GDPR 罚单。这凸显了在全球化背景下,企业在数据隐私保护方面所面临…...

【python】使用Python和BERT进行文本摘要:从数据预处理到模型训练与生成

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着信息爆炸时代的到来,海量文本数据的高效处理与理解成为亟待解决的问题。文本摘要作为自然语言处理(NLP)中的关键任务,旨在自动生成…...

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】5.3 相关性分析(PEARSON/SPEARMAN相关系数)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 5.3 相关性分析(PEARSON/SPEARMAN相关系数)5.3.1 相关性分析理论基础5.3.1.1 相关系数定义与分类5.3.1.2 Pearson相关系数( Pearson Corr…...

Redis面试 实战贴 后面持续更新链接

redis是使用C语言写的。 面试问题列表: Redis支持哪些数据类型?各适用于什么场景? Redis为什么采用单线程模型?优势与瓶颈是什么? RDB和AOF持久化的区别?如何选择?混合持久化如何实现&#x…...

小程序滚动条隐藏(uniapp版本)

单独指定页面隐藏&#xff08;找到对应的scroll-view&#xff09; <style> /* 全局隐藏滚动条样式 */ ::-webkit-scrollbar { display: none; width: 0; height: 0; color: transparent; background: transparent; } /* 确保scroll-view组件也隐藏滚动条 */ …...

python基础:序列和索引-->Python的特殊属性

一.序列和索引 1.1 用索引检索字符串中的元素 # 正向递增 shelloworld for i in range (0,len(s)):# i是索引print(i,s[i],end\t\t) print(\n--------------------------) # 反向递减 for i in range (-10,0):print(i,s[i],end\t\t)print(\n--------------------------) print(…...

java反射(2)

package 反射;import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Arrays;public class demo {public static void main(String[] args) throws Exception {// 通过类的全限定名获取对应的 Class 对象…...

C++核心概念全解析:从析构函数到运算符重载的深度指南

目录 前言一、构析函数1.1 概念1.2 语法格式 1.3 核心特性1.4 调用时机1.5 构造函数 vs 析构函数1.6 代码示例 二、this关键字2.1 基本概念2.2 核心特性2.3 使用场景2.3.1 区分成员与局部变量2.3.2 返回对象自身&#xff08;链式调用&#xff09;2.3.3 成员函数间传递当前对象2…...

如何巧妙解决 Too many connections 报错?

1. 背景 在日常的 MySQL 运维中&#xff0c;难免会出现参数设置不合理&#xff0c;导致 MySQL 在使用过程中出现各种各样的问题。 今天&#xff0c;我们就来讲解一下 MySQL 运维中一种常见的问题&#xff1a;最大连接数设置不合理&#xff0c;一旦到了业务高峰期就会出现连接…...

自由学习记录(58)

Why you were able to complete the SpringBoot MyBatisPlus task smoothly: Clear logic flow: Database → Entity → Service → Controller → API → JSON response. Errors are explicit, results are verifiable — you know what’s broken and what’s fixed. Sta…...

ES6 知识点整理

一、变量声明&#xff1a;var、let、const 的区别 作用域 var&#xff1a;函数作用域&#xff08;函数内有效&#xff09;。let/const&#xff1a;块级作用域&#xff08;{} 内有效&#xff0c;如 if、for&#xff09;。 变量提升 var 会提升变量到作用域顶部&#xff08;值为…...

《MATLAB实战训练营:从入门到工业级应用》高阶挑战篇-《5G通信速成:MATLAB毫米波信道建模仿真指南》

《MATLAB实战训练营&#xff1a;从入门到工业级应用》高阶挑战篇-5G通信速成&#xff1a;MATLAB毫米波信道建模仿真指南 &#x1f680;&#x1f4e1; 大家好&#xff01;今天我将带大家进入5G通信的奇妙世界&#xff0c;我们一起探索5G通信中最激动人心的部分之一——毫米波信…...

工程师 - 汽车分类

欧洲和中国按字母对汽车分类&#xff1a; **轴距**&#xff1a;简单来说&#xff0c;就是前轮中心点到后轮中心点之间的距离&#xff0c;也就是前轮轴和后轮轴之间的长度。根据轴距的大小&#xff0c;国际上通常把轿车分为以下几类&#xff08;德国大众汽车习惯用A\B\C\D分类&a…...

57.[前端开发-前端工程化]Day04-webpack插件模式-搭建本地服务器

Webpack常见的插件和模式 1 认识插件Plugin 认识Plugin 2 CleanWebpackPlugin CleanWebpackPlugin 3 HtmlWebpackPlugin HtmlWebpackPlugin 生成index.html分析 自定义HTML模板 自定义模板数据填充 4 DefinePlugin DefinePlugin的介绍 DefinePlugin的使用 5 mode模式配置…...