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 的主要作用包括:

  1. 管理资源:分配和管理计算所需的资源,如GPU和内存。
  2. 执行计算图:具体执行计算图中的操作(ops),并返回结果。
  3. 控制生命周期:在会话的生命周期内,可以反复执行计算图的一部分或全部。

会话的定义与结构

在 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()

用法

基本用法
  1. 创建会话:可以通过 tf.Session() 创建一个会话对象。
  2. 执行计算:使用 sess.run() 方法执行计算图中的节点。
  3. 关闭会话:使用 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 确保了会话在使用完毕后正确关闭,避免了资源泄露和错误的释放。

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

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

相关文章

AI文档助手:提升文档处理效率

随着人工智能技术的飞速发展,AI文档助手已经成为我们提升工作效率的重要工具。小编就来和大家分享几款AI文档助手,它们能够通过智能化的功能帮助我们快速、准确地完成各种文档任务。 1.百度文库AI助手 百度文库AI助手是百度基于文心一言重构的一站式智能…

全景图片/老照片/动漫图片一键无损放大与修复

在日常生活中,我们经常使用系统自带的图片处理软件来对图片进行缩放操作,从而实现放大或缩小图片。然而,这种方法会带来一个问题:如果原始图片较小,放大后会导致精度损失,使图片变得模糊。 近年来&#xf…

vue uniapp MEQX JWT认证

1.下载依赖 npm install mqttimport * as mqtt from "mqtt/dist/mqtt.min" ​ 我是用的uniapp vue3 vite这里尝试了很多方式,都导入不进去后来我就采用的本地引入方式, 把mqtt.min.js下载到本地然后在index.html 中导入<script src"./MEQX/mqtt.js" typ…

rapidocr-onnxruntime库及在open-webui上传PDF 图像处理 (使用 OCR)应用

背景 rapidocr-onnxruntime是一个跨平台的OCR库&#xff0c;基于ONNXRuntime推理框架。 目前已知运行速度最快、支持最广&#xff0c;完全开源免费并支持离线快速部署的多平台多语言OCR。 缘起&#xff1a;百度paddle工程化不是太好&#xff0c;为了方便大家在各种端上进行oc…

终极指南:解决iCloud备份错误代码的全面策略

终极指南&#xff1a;解决iCloud备份错误代码的全面策略 在数字化时代&#xff0c;数据安全至关重要。iCloud作为Apple提供的云服务&#xff0c;为我们的iPhone、iPad等设备提供了便捷的数据备份与恢复功能。然而&#xff0c;在使用过程中&#xff0c;我们可能会遇到各种备份错…

ros,open3d单线激光雷达数据可视化

之前一直尝试将可视化写在ros的回调函数中&#xff0c;visualization一直会阻塞进程&#xff0c;换一种方式可以顺利实现可视化 import rospy import open3d as o3d import numpy as np from sensor_msgs.msg import LaserScanglobal scan_data scan_data Nonedef callback_l…

机器学习之对比学习方法SimSiam(Simple Siamese)

SimSiam(Simple Siamese)是一种自监督对比学习方法,由Facebook AI Research于2021年提出。SimSiam的设计旨在避免负样本对,并且不使用动量编码器,进一步简化了对比学习的实现过程。 SimSiam的基本概念 自监督学习: 自监督学习方法通过从数据本身获取监督信号进行学习,不…

qt 播放音频 c++

目录 不能播放&#xff1a; 可以播放&#xff1a; 原因&#xff1a; QT core gui sql network multimedia 不能播放&#xff1a; #include <QMediaPlayer>QMediaPlayer player;// player.setMedia(QUrl("qrc:/res/raw/qs.mp3"));player.setMedia(QU…

近邻算法基础概念

近邻算法&#xff0c;尤其是K-最近邻&#xff08;K-Nearest Neighbors, KNN&#xff09;算法&#xff0c;是一种基于实例的学习方法&#xff0c;广泛应用于分类和回归分析中。 基本概念 目的&#xff1a;KNN算法的目的是对新的未知样本进行分类&#xff08;或预测其数值&…

一款强大的上位机模拟通讯工具----HslCommunicationDemo

目录 引言 工具概述 官网下载链接 安装步骤 使用教程 引言 在工业自动化和机器人控制领域&#xff0c;上位机模拟通讯工具是工程师和开发者日常工作中不可或缺的一部分。这些工具不仅能帮助我们验证设备间的通信状态&#xff0c;还能在设备调试和集成过程中提供极大的便利。…

38.控制功能实现

上一个内容&#xff1a;37.添加简易的调试功能 以 37.添加简易的调试功能 它的代码为基础进行修改 效果图&#xff1a; 下图红框位置的功能实现 Dlls项目中添加一个Dialog Dialog如下 然后给它添加一个类&#xff0c;MFC添加的类可能会报错添加 #include "afxdialogex.h…

聚酰胺-酰亚胺(PAI)应用前景广阔 酰氯法和异氰酸酯法为其主流制备方法

聚酰胺-酰亚胺&#xff08;PAI&#xff09;应用前景广阔 酰氯法和异氰酸酯法为其主流制备方法 聚酰胺-酰亚胺又称PAI&#xff0c;是一种分子链呈酰亚胺环和酰胺键有规则交替排列的高性能热塑性树脂。PAI具有耐磨耗性能好、摩擦系数低、尺寸稳定性好、耐高温、耐辐射、化学稳定性…

通俗易懂的Chat GPT以及国内GPT推荐

ChatGPT是一种先进的聊天机器人&#xff0c;它的全称是“生成式预训练变换器”&#xff08;Generative Pre-trained Transformer&#xff09;。ChatGPT背后的基本原理可以简化为以下几个关键点&#xff1a; 大规模语言模型&#xff1a; ChatGPT建立在一个大规模的语言模型之上&…

如何选择OLED弧形屏厂家

在选择OLED弧形屏厂家时&#xff0c;为确保采购到高质量且符合需求的产品&#xff0c;需要综合考虑多个因素。以下是一份详细的指南&#xff0c;帮助您清晰、系统地选择OLED弧形屏厂家&#xff1a; 一、技术实力 研发能力&#xff1a;了解厂家在OLED显示技术方面的研发能力&…

华为云L实例云服务器部署前后端分离项目全过程记录

1、配置云服务器 https://blog.csdn.net/modaoshi51991/article/details/139547630 2、上传前端项目并配置nginx 首先在前端项目运行以下代码将项目打包 我遇到node.js和openssl两个版本不兼容问题&#xff0c;更新版本依次解决即可 vue-cli-service build看一下package.json…

第12集《大乘起信论》

请大家打开《讲义》第二十四页&#xff0c;卯三、总显四种大义。 这一大科是讲到心生灭门。生灭的因缘是依止阿赖耶识&#xff0c;阿赖耶识当中有两种功能&#xff1a;一个是觉&#xff0c;一个是不觉。觉悟的功能又分成两种&#xff1a;一个是始觉&#xff0c;一个是本觉。我…

解决SpringMVC使用MyBatis-Plus自定义MyBaits拦截器不生效的问题

自定义MyBatis拦截器 如果是SpringBoot项目引入Component注解就生效了&#xff0c;但是SpringMVC不行 import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.executor.parameter.ParameterHandler; import org.apache.ibatis.executor.statement.StatementHandler; i…

亮数据,一款新的低代码爬虫利器!

在当今数据驱动型时代&#xff0c;数据采集和分析能力算是个人和企业的核心竞争力。然而&#xff0c;手动采集数据耗时费力且效率低下&#xff0c;而且容易被网站封禁。 我之前使用过一个爬虫工具&#xff0c;亮数据&#xff08;Bright Data&#xff09; &#xff0c;是一款低…

力扣随机一题 哈希表 排序 数组

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 2491.划分技能点相等的团队【中等】 题目&#xff1a; 给你一个正整数数组…

【深海王国】小学生都能玩的单片机?零基础入门单片机Arduino带你打开嵌入式的大门!(9)

Hi٩(๑o๑)۶, 各位深海王国的同志们&#xff0c;早上下午晚上凌晨好呀~辛勤工作的你今天也辛苦啦 (o゜▽゜)o☆ 今天大都督继续为大家带来系列——小学生都能玩的单片机&#xff01;带你一周内快速走进嵌入式的大门&#xff0c;let’s go&#xff01; &#xff08;9&#x…