tensorflow学习1.3-创建会话,启动会话
tensorflow学习1.3-创建会话,启动会话
- 会话的由来与作用
- 由来
- 作用
- 会话的定义与结构
- 定义
- 用法
- 基本用法
- 上下文管理器
- 执行部分计算图
- 获取多个结果
- 总结
- 练习代码
- 报错
- 原因:
- TensorFlow 2.x中的Eager Execution
- 使用兼容模式来启用Session
- Eager Execution和计算图的混合使用
- 总结
- 修改
在TensorFlow 1.x版本中,
Session 会话是一个非常重要的概念。它提供了一个执行计算图(computation graph)的环境。TensorFlow 2.x 版本引入了Eager Execution模式,使得大多数操作立即执行,而不再需要显式的会话管理。但是,为了理解 TensorFlow 的基础,以及在某些情况下可能仍然需要使用的低级操作,我们还是有必要了解一下 TensorFlow 1.x 中的会话机制。
会话的由来与作用
由来
TensorFlow最初是由谷歌大脑团队开发的,用于大规模机器学习任务。最初的设计目标之一是能够高效地在分布式环境中执行计算图。为了实现这一点,TensorFlow引入了 Session 概念来管理和执行计算图。
作用
Session 的主要作用包括:
- 管理资源:分配和管理计算所需的资源,如GPU和内存。
- 执行计算图:具体执行计算图中的操作(ops),并返回结果。
- 控制生命周期:在会话的生命周期内,可以反复执行计算图的一部分或全部。
会话的定义与结构
在 TensorFlow 1.x 中,会话是通过 tf.Session 类定义的。其主要结构和用法如下:
定义
# 创建一个计算图
import tensorflow as tf# 定义一个计算图节点
a = tf.constant(5.0)
b = tf.constant(6.0)
c = a + b# 创建一个会话
sess = tf.Session()# 在会话中运行计算图
result = sess.run(c)
print(result) # 输出:11.0# 关闭会话
sess.close()
用法
基本用法
- 创建会话:可以通过
tf.Session()创建一个会话对象。 - 执行计算:使用
sess.run()方法执行计算图中的节点。 - 关闭会话:使用
sess.close()关闭会话,释放资源。
上下文管理器
为了确保会话在使用后正确关闭,可以使用 Python 的上下文管理器(with 语句):
import tensorflow as tfa = tf.constant(5.0)
b = tf.constant(6.0)
c = a + bwith tf.Session() as sess:result = sess.run(c)print(result) # 输出:11.0
使用上下文管理器的好处是会在代码块执行完毕后自动关闭会话。
执行部分计算图
会话允许你执行计算图的一部分,这对于大型复杂的计算图尤其有用:
import tensorflow as tfa = tf.constant(5.0)
b = tf.constant(6.0)
c = a + b
d = c * 2with tf.Session() as sess:# 只执行c节点result_c = sess.run(c)print(result_c) # 输出:11.0# 执行d节点,TensorFlow会自动计算c节点的值result_d = sess.run(d)print(result_d) # 输出:22.0
获取多个结果
可以在一次会话运行中获取多个节点的结果:
import tensorflow as tfa = tf.constant(5.0)
b = tf.constant(6.0)
c = a + b
d = c * 2with tf.Session() as sess:result_c, result_d = sess.run([c, d])print(result_c) # 输出:11.0print(result_d) # 输出:22.0
总结
Session 会话是 TensorFlow 1.x 中用于执行计算图的环境,通过会话可以管理资源、执行计算图并获取结果。在 TensorFlow 2.x 中,引入了更易用的 Eager Execution 模式,使得大部分操作可以立即执行,而不需要显式管理会话。然而,了解 Session 的概念对于理解 TensorFlow 的设计原理和使用低级 API 仍然是有帮助的。
练习代码
import tensorflow as tf# 创建一个变量
m1 = tf.constant([[3,3]])#创建一个常量
m2=tf.constant([[2],[3]])#矩阵乘法 OP
product = tf.matmul(m1,m2)print(product)#定义会话
sess = tf.Session()#调用sess中的run方法执行矩阵乘法op
result = sess.run(product)
print(result)
sess.close()with tf.Session() as sess:# 调用sess中的run方法来执行矩阵惩罚opresult = sess.run(product)print(result)
报错
在我的环境中运行会遇见以下报错:
sess = tf.Session() AttributeError: module 'tensorflow' has no attribute 'Session'. Did you mean: 'version'?
原因:
在TensorFlow 2.x中,Session已经被弃用了,取而代之的是更加直观和易用的Eager Execution模式。Eager Execution使得TensorFlow操作立即执行,并返回结果,而不是构建一个计算图,然后再通过会话来运行这些图。
尽管如此,如果你确实需要使用与TensorFlow 1.x兼容的功能,比如在某些情况下必须要用到计算图和会话,可以通过在TensorFlow 2.x中启用兼容模式来使用这些功能。
TensorFlow 2.x中的Eager Execution
默认情况下,TensorFlow 2.x启用了Eager Execution模式,这使得编写和调试代码更加直观。下面是一个简单的例子:
import tensorflow as tf# Eager Execution模式下直接计算
a = tf.constant(5.0)
b = tf.constant(6.0)
c = a + b
print(c) # 输出:tf.Tensor(11.0, shape=(), dtype=float32)
使用兼容模式来启用Session
如果你需要在TensorFlow 2.x中使用会话和计算图,可以启用兼容模式:
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()# 创建一个计算图
a = tf.constant(5.0)
b = tf.constant(6.0)
c = a + b# 创建一个会话
sess = tf.Session()# 在会话中运行计算图
result = sess.run(c)
print(result) # 输出:11.0# 关闭会话
sess.close()
Eager Execution和计算图的混合使用
在某些复杂场景中,你可能需要混合使用Eager Execution和计算图。这种情况下,你可以使用tf.function来定义需要构建为计算图的部分代码:
import tensorflow as tf# Eager Execution模式下直接计算
a = tf.constant(5.0)
b = tf.constant(6.0)
c = a + b
print(c) # 输出:tf.Tensor(11.0, shape=(), dtype=float32)# 使用tf.function将代码转换为计算图
@tf.function
def compute():d = a * breturn dresult = compute()
print(result) # 输出:tf.Tensor(30.0, shape=(), dtype=float32)
总结
在TensorFlow 2.x中,建议尽量使用Eager Execution模式,因为它更加直观和易于调试。如果你必须使用与TensorFlow 1.x兼容的功能,可以通过启用兼容模式来使用会话和计算图。在大多数情况下,Eager Execution模式已经足够强大,并且能够满足大多数深度学习任务的需求。
修改
在TensorFlow 2.x中,推荐使用Eager Execution模式,因为它更加直观和易于调试。以下是将代码转换为Eager Execution模式的版本:
import tensorflow as tf# 确保Eager Execution模式已启用
tf.config.run_functions_eagerly(True)# 创建一个变量
m1 = tf.constant([[3, 3]])# 创建一个常量
m2 = tf.constant([[2], [3]])# 矩阵乘法 OP
product = tf.matmul(m1, m2)# 立即执行操作并返回结果
print(product.numpy())# 在Eager Execution模式下,不需要显式定义会话
# 结果已经通过Eager Execution模式返回
result = product.numpy()
print(result)
在这个代码中,我们不需要显式定义会话。Eager Execution模式使得TensorFlow操作立即执行并返回结果,这样代码更加直观和易于调试。如果需要与TensorFlow 1.x兼容的功能,可以启用兼容模式,但在大多数情况下,Eager Execution模式已经足够强大,并且能够满足大多数深度学习任务的需求。
在TensorFlow 2.x中,直接使用Eager Execution模式会避免很多TensorFlow 1.x中的复杂性和问题。如果需要使用与TensorFlow 1.x兼容的功能,确保在兼容模式下正确地定义和使用计算图。
这里是修正后的代码,确保兼容模式下操作添加到计算图中:
import tensorflow as tf# 使用兼容模式
tf.compat.v1.disable_eager_execution()# 创建一个变量
m1 = tf.compat.v1.constant([[3, 3]])# 创建一个常量
m2 = tf.compat.v1.constant([[2], [3]])# 矩阵乘法 OP
product = tf.compat.v1.matmul(m1, m2)# 定义会话
sess = tf.compat.v1.Session()# 调用sess中的run方法执行矩阵乘法op
result = sess.run(product)
print(result)
sess.close()# 使用上下文管理器定义会话
with tf.compat.v1.Session() as sess:# 调用sess中的run方法来执行矩阵乘法opresult = sess.run(product)print(result)
在这个代码中,使用了 tf.compat.v1.disable_eager_execution() 来禁用Eager Execution,并确保所有操作都在兼容模式下添加到计算图中。然后,使用 tf.compat.v1.Session 来运行这些操作。这种方式能够确保在TensorFlow 2.x中使用与1.x兼容的会话模式。
使用上下文管理器定义会话:
# 使用上下文管理器定义会话
with tf.compat.v1.Session() as sess:# 调用sess中的run方法来执行矩阵乘法opresult = sess.run(product)print(result)
-
with tf.compat.v1.Session() as sess::使用with关键字创建一个tf.compat.v1.Session()对象,并将其赋值给sess变量。tf.compat.v1.Session()是 TensorFlow 2.x 中兼容 TensorFlow 1.x 的会话对象。 -
sess.run(product):在会话中调用run方法来执行之前定义的矩阵乘法操作product。这一步实际上会启动 TensorFlow 的计算图,并执行相应的计算。 -
print(result):打印执行结果result,即矩阵乘法的结果。
上下文管理器的作用:
使用 with 语句块可以确保在进入 with 代码块时会话 sess 被创建,并在代码块执行结束时自动关闭。这种方式避免了手动调用 sess.close() 来关闭会话,同时也确保了资源的正确释放,特别是在 TensorFlow 中,关闭会话能够释放计算资源和内存。
总结来说,这段代码的目的是使用 TensorFlow 2.x 的兼容模式创建一个会话,并在会话中执行矩阵乘法操作,最后打印执行结果。使用上下文管理器 with 确保了会话在使用完毕后正确关闭,避免了资源泄露和错误的释放。
相关文章:
tensorflow学习1.3-创建会话,启动会话
tensorflow学习1.3-创建会话,启动会话 会话的由来与作用由来作用 会话的定义与结构定义 用法基本用法上下文管理器执行部分计算图获取多个结果 总结 练习代码报错原因:TensorFlow 2.x中的Eager Execution使用兼容模式来启用SessionEager Execution和计算…...
QT基本对话框(基本对话框、工具盒类、进度条、调色板与电子钟、可扩展对话框、程序启动画面)
此篇文章通过实例介绍基本对话框的用法。首先介绍标准文件对话框(QFileDialog)、标准颜色对话框(QColorDialog)、标准字体对话框(QFontDialog)、标准输入对话框(QInputDialog)以及标…...
Docker 部署 MariaDB 数据库 与 Adminer 数据库管理工具
文章目录 MariaDBmariadb.cnf开启 binlog Adminerdocker-compose.ymlAdminer 连接 MariaDB MariaDB MariaDB是一个流行的开源关系型数据库管理系统(RDBMS),它是MySQL的一个分支和替代品。 官网:https://mariadb.com/镜像ÿ…...
qt 可以在一个函数中读一个文件,然后再将内容写入另一个文件中
是的,Qt 允许你在一个函数中读取一个文件的内容,并将这些内容写入到另一个文件中。这可以通过结合使用 QFile 和 QTextStream(或 QDataStream,取决于你的具体需求)来实现。以下是一个简单的示例,展示了如何…...
Dijkstra算法C代码
一个带权图n个点m条边,求起点到终点的最短距离 先定义一个邻接矩阵graph,graph[i][j]表示从i到j的距离,i到j没有路就表示为无穷 然后定义一个visit数组,visit[i]表示i结点是否被访问 然后定义一个dist数组,dist[i]表…...
P1064 [NOIP2006 提高组] 金明的预算方案
[NOIP2006 提高组] 金明的预算方案 题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置࿰…...
大型企业组网如何规划网络
大型企业组网是一个复杂的过程,它需要细致的规划和设计,以确保网络能够满足企业的业务需求,同时保证性能、安全性和可扩展性。以下是规划大型企业网络的一些关键步骤和考虑因素: 1. 需求分析 业务需求:与各个业务部门…...
java:aocache的单实例缓存(二)
之前一篇博客《java:aocache的单实例缓存》介绍了aoocache使用注解AoCacheable实现单实例缓存的方式,同时也指出了这种方式的使用限制,就是这个注解定义的构造方法,不能再创建出新实例。 为了更灵活方便的实现单实例。aocache最新版本0.4.0增…...
ElasticSearch安装部署
简介 Elasticsearch 是一个开源的分布式搜索和分析引擎,用于实时地存储、检索和分析大数据量。它基于 Apache Lucene 搜索引擎库构建而成,提供了一个强大、稳定且易于扩展的搜索解决方案。 主要特点和用途: 分布式存储和搜索: E…...
数据赋能(132)——开发:数据转换——影响因素、直接作用、主要特征
影响因素 数据转换过程中需要考虑的一些影响因素: 数据格式与结构: 不同系统或应用可能使用不同的数据格式(如JSON、XML、CSV等)和数据结构(如关系型数据库、非关系型数据库等)。数据转换需要确保原始数据…...
TMGM:ASIC撤销禁令,TMGM强化合规、重启差价合约服务
TMGM作为差价合约(CFDs)与保证金外汇交易领域的领航者,安全、合规、高效被奉为我集团的终身使命。澳大利亚证券和投资委员会(ASIC)已正式撤销了早前针对TMGM差价合约业务实施的临时止损令。这一误会的解除,…...
基于SpringBoot网吧管理系统设计和实现(源码+LW+调试文档+讲解等)
💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 Java精品实战案例《600套》 2025-2026年最值得选择的Java毕业设计选题大全࿱…...
实测2024年最佳的三款Socks5代理IP网站
一、引言 在浩瀚的网络世界中,Socks5代理IP服务如同导航灯塔,指引我们穿越数据海洋,安全、稳定地访问目标网站。作为专业的测评团队,我们深知一款优秀的Socks5代理IP网站需要具备哪些特质:稳定的IP资源、高效的连接速…...
Pythonnet能导入clr,但无法引入System模块?
【pythonnet详解】—— Python 和 .NET 互操作的库_pythonnet 详细使用-CSDN博客 Python中动态调用C#的dll动态链接库中方法_python 如何调用c# dll-CSDN博客 需求:Python调用并传List<float>类型参数给.Net 起初:直接 # 创建一个Python浮点数…...
媒体宣发套餐的概述及推广方法-华媒舍
在今天的数字化时代,对于产品和服务的宣传已经变得不可或缺。媒体宣发套餐作为一种高效的宣传方式,在帮助企业塑造品牌形象、扩大影响力方面扮演着重要角色。本文将揭秘媒体宣发套餐,为您呈现一条通往成功的路。 1. 媒体宣发套餐的概述 媒体…...
Windows和Linux C++判断磁盘空间是否充足
基本是由百度Ai写代码生成的,记录一下。实现此功能需要调用系统的API函数。 对于Windows,可调用函数GetDiskFreeSpaceEx,使用该函数需要包含头文件windows.h。该函数的原型: 它的四个参数: lpDirectoryName࿰…...
数据访问层如何提取数据到其他层,其他类中
当然可以,以下是一些具体的例子,展示了如何将数据库访问逻辑封装在一个单独的类中,并在其他类中使用这个类来获取数据。 数据库访问类(DatabaseAccess.java): java复制代码 import java.sql.*; import ja…...
【JS】AI总结:JavaScript中常用的判空方法
在JavaScript中,判空是一个常见的操作,因为变量可能未定义、未初始化或包含特定的空值。以下是JavaScript中常用的判空方法: 使用if语句直接判断: 如果变量是null、undefined、0、NaN、空字符串(""ÿ…...
Rust单元测试、集成测试
单元测试、集成测试 在了解了如何在 Rust 中写测试用例后,本章节我们将学习如何实现单元测试、集成测试,其实它们用到的技术还是上一章节中的测试技术,只不过对如何组织测试代码提出了新的要求。 单元测试 单元测试目标是测试某一个代码单…...
vue全局方法plugins/utils
一、在src目录下创建一个plugins文件夹 test.ts文件存放创建的方法,index.ts用于接收所有自定义方法进行统一处理 二、编写自定义方法 // test.ts文件 export default {handleTest(val1: number, val2: number) {// 只是一个求和的方法return val1 val2;}, };三…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...
