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.pswp.cn/diannao/35291.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/35291.shtml
英文地址,請注明出處:http://en.pswp.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…