cs336之注意pytorch的tensor在哪里?(assert的使用)

問題

記住:無論何時你在pytorch中有一個張量tensor,你應該始終問一個問題:它當前位于哪里?
注意它在CPU還是在GPU中。
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
要判斷它在哪里,可以使用python的assert斷言語句。

assert斷言

在 Python 中,assert 是一個調試輔助工具,用于在代碼中設置檢查點。它的核心作用是驗證某個條件是否為真,如果條件為假則立即拋出 AssertionError 異常。

基本語法

assert condition, message
  • condition:要測試的條件表達式(返回布爾值)
  • message(可選):斷言失敗時顯示的錯誤信息(字符串)

工作原理

  1. conditionTrue 時,程序繼續執行
  2. conditionFalse 時:
    • 立即拋出 AssertionError
    • 若有 message,則將其作為異常信息輸出

注意: 在運行python代碼時通過 python -Opython -OO 運行程序可全局禁用斷言。這意味著在優化模式(__debug__為False)下,所有的assert語句都不會被執行。

IDE 的 “Debug 運行” 按鈕 ≠ Python 的 Debug 模式

  • IDE 的 Debug 按鈕:啟動調試器(可設置斷點、單步執行)
  • Python 的 Debug 模式:由 __debug__ 標志控制,決定 assert 是否生效
    在這里插入圖片描述

示例代碼

# 驗證輸入值非負
def calculate_square_root(x):assert x >= 0, "輸入不能為負數"return x ** 0.5print(calculate_square_root(4))  # 正常執行
print(calculate_square_root(-1)) # 觸發 AssertionError

輸出結果

2.0
Traceback (most recent call last):File "demo.py", line 6, in <module>print(calculate_square_root(-1))File "demo.py", line 2, in calculate_square_rootassert x >= 0, "輸入不能為負數"
AssertionError: 輸入不能為負數

關鍵特性

  1. 調試工具:用于捕獲程序中的邏輯錯誤
  2. 可禁用性
    • 通過 python -Opython -OO 運行程序可全局禁用斷言
    • 禁用后所有 assert 語句會被解釋器忽略
  3. 非錯誤處理機制
    • 不應替代常規的異常處理(如 try/except
    • 不能用于驗證用戶輸入或外部數據

典型使用場景

  1. 驗證函數參數有效性

    def process_data(data):assert isinstance(data, list), "需要列表類型輸入"# 處理邏輯
    
  2. 檢查中間狀態

    def transform(values):result = complex_operation(values)assert len(result) == len(values), "數據長度不一致"return result
    
  3. 測試不變性條件

    class Account:def withdraw(self, amount):new_balance = self.balance - amountassert new_balance >= 0, "余額不足"self.balance = new_balance
    

注意事項

  1. 生產環境慎用

    • 斷言可能被全局禁用,不可依賴其進行安全檢查
    • 重要檢查應使用常規異常
    # 生產環境推薦寫法
    if x < 0:raise ValueError("輸入不能為負數")
    
  2. 錯誤信息優化

    • 添加有意義的錯誤信息便于調試
    assert len(items) > 0, f"獲得空列表,當前項目: {items}"
    
  3. 性能影響

    • 斷言語句會增加執行開銷
    • 在性能關鍵代碼中避免過度使用

與異常處理的區別

特性assert常規異常 (try/except)
設計目的調試期間捕獲程序錯誤處理預期可能發生的錯誤情況
生產環境行為可被全局禁用始終生效
適用場景檢查"不可能發生"的條件驗證用戶輸入/外部資源等
錯誤類型固定拋出 AssertionError可拋出任意異常類型

最佳實踐:將 assert 視為代碼中的即時文檔和調試助手,而非生產環境的錯誤處理機制。

在 Python 中,assert 是一個調試輔助工具,用于在代碼中設置檢查點。它的核心作用是驗證某個條件是否為真,如果條件為假則立即拋出 AssertionError 異常。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/91762.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/91762.shtml
英文地址,請注明出處:http://en.pswp.cn/web/91762.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Mysql 分區表

分區表是將一張表分成多張獨立子表&#xff0c;每個子表是一個區&#xff0c;目的是提高查詢效率。 從 server 層來看&#xff0c;只有一張表。但是從引擎層來看&#xff0c;是多張表&#xff0c;對應多個.idb文件。引擎層訪問數據只訪問特定分區表&#xff0c;也只對特定分區表…

Makefile 入門與實踐指南

Makefile 是用于 make 工具的配置文件&#xff0c;它定義了如何編譯和鏈接你的項目&#xff0c;讓構建過程自動化。一、核心概念 make 的核心思想是 “目標”&#xff08;Target&#xff09; 和 “依賴”&#xff08;Dependencies&#xff09;&#xff1a; 目標 (Target)&#…

分布式微服務--Nacos作為配置中心(補)關于bosststrap.yml與@RefreshScope

一、關于bosststrap.yml? bootstrap.yml 和 application.yml 的區別對比項bootstrap.ymlapplication.yml加載時機優先于 application.yml 加載&#xff08;啟動早期&#xff09;程序初始化完成后加載主要用途設置應用的外部配置源、注冊中心信息等設置應用內部配置&#xff0c…

[Qt]QString 與Sqlite3 字符串互動[漢字不亂碼]

環境&#xff1a;Qt C&#xff08;msvc c&#xff09;1.將與數據庫交互的代碼文件編碼轉換為utf-8-bom編碼&#xff0c;&#xff08;可使用notepad 進行轉換&#xff09;2.在代碼文件頭文件中加上下面代碼。//vs2010 版本是 1600 #if defined(_MSC_VER) && (_MSC_VER &…

SpringBoot啟動項目詳解

SpringBoot 的啟動過程是一個整合 Spring 核心容器、自動配置、嵌入式服務器等功能的復雜流程&#xff0c;核心目標是 “簡化配置、快速啟動”。下面從入口類開始&#xff0c;逐步拆解其詳細啟動步驟&#xff1a;一、啟動入口&#xff1a;SpringBootApplication與main方法Sprin…

PCB 控深槽如何破解 5G 基站 120℃高熱魔咒?

5G 基站在高頻通信下的功耗較 4G 基站提升 3-4 倍&#xff0c;射頻模塊、電源單元等核心部件的工作溫度常突破 120℃&#xff0c;遠超設備安全閾值&#xff08;≤85℃&#xff09;&#xff0c;形成制約通信穩定性的 “高熱魔咒”。印制線路板&#xff08;PCB&#xff09;作為熱…

NEXT.js 打包部署到服務器

在網上查了一下&#xff0c;記錄一下1.首先執行打包命令&#xff0c;我這個項目是用的pnpm&#xff0c;可以根據項目需求使用 npm 或者別的pnpm run build2.打包完成后會有一個 .next 的文件夾&#xff0c;需要把下圖的這些文件放到服務器。服務器需要有node環境之后就需要執行…

【AI分析】uv庫自動安裝腳本uv-installer-0.8.3.ps1分析

目錄uv 安裝腳本完整分析報告1. 腳本概述2. 參數解析3. 環境變量控制4. 核心函數詳解a. Install-Binary&#xff08;主控函數&#xff09;b. Get-TargetTriple&#xff08;架構檢測&#xff09;c. Download&#xff08;下載處理&#xff09;d. Invoke-Installer&#xff08;安裝…

etcd 的安裝與使用

介紹 Etcd 是一個 golang 編寫的分布式、高可用的一致性鍵值存儲系統&#xff0c;用于配置共享和服 務發現等。它使用 Raft 一致性算法來保持集群數據的一致性&#xff0c;且客戶端通過長連接 watch 功能&#xff0c;能夠及時收到數據變化通知&#xff0c;相較于 Zookeeper 框…

conda : 無法將“conda”項識別為 cmdlet、函數、腳本文件或可運行程序的名稱。請檢查名稱的拼寫,如果包括路徑,請確保路徑正

詳細問題 PS C:\Users\wh109> conda init powershell conda : 無法將“conda”項識別為 cmdlet、函數、腳本文件或可運行程序的名稱。請檢查名稱的拼寫&#xff0c;如果包括路徑&#xff0c;請確保路徑正 確&#xff0c;然后再試一次。 所在位置 行:1 字符: 1conda init pow…

HQChart實戰教程58:K線主圖仿TradingView實現

本文將詳細介紹如何使用HQChart實現類似TradingView風格的K線主圖,包含完整的代碼實現和詳細注釋,適合金融圖表開發者和量化交易愛好者閱讀。 一、TradingView風格特點分析 在開始實現前,我們先分析TradingView的K線主圖核心特點: 簡潔現代的UI設計:深色背景、清晰的網格…

GitPython08-源碼解讀

GitPython08-源碼解讀 1-核心知識 1&#xff09;gitPython核心代碼很多都是對git命令返回的結果進行解析&#xff0c;在此補充git命令的返回內容2&#xff09;git ls-tree -> 查看某個提交或分支所對應的目錄樹3&#xff09;源碼中Tree對應的業務邏輯 -> 獲取git ls-tre…

中科院開源HYPIR圖像復原大模型:1.7秒,老照片變8K畫質

目錄 前言 一、告別“龜速”藝術家&#xff0c;擁抱“閃電”打印機 二、不止是高清&#xff1a;它看得懂文字&#xff0c;更能理解你的心意 2.1 首先&#xff0c;它是位“文字保衛者” 2.2 其次&#xff0c;它還是個“細節創造家” 2.3 最后&#xff0c;它是一個能“聽懂…

設計Mock華為昇騰GPU的MindSpore和CANN的庫的流程與實現

在沒有華為昇騰GPU可用的情況下用C庫寫一個Mock MindSpore和CANN的庫&#xff0c;調用多核CPU和內存的資源來模擬GPU的算力&#xff0c;調試MindSpore和CANN的C代碼&#xff0c;做這個庫的基本流程步驟和詳細設計是什么&#xff1f; 要創建一個Mock庫來模擬華為昇騰GPU&#xf…

【AI問答記錄】grafana接收query請求中未攜帶step參數,后端基于intervalMs和maxDataPoints等參數計算step的邏輯

讓我詳細分析Grafana源碼中計算step的完整邏輯&#xff0c;它確實比簡單的intervalMs/1000復雜得多。 完整的Step計算流程 1. 入口點&#xff1a;[models.Parse](file://F:\JavaProject\grafana-release-11.2.0\pkg\promlib\models\query.go#L190-L274)函數 在pkg/promlib/mode…

再談亞馬遜云科技(AWS)上海AI研究院7月22日關閉事件

【科技明說 &#xff5c; 科技熱點關注】亞馬遜云科技&#xff08;AWS&#xff09;上海AI研究院已于2025年7月22日正式解散&#xff0c;這是亞馬遜在全球范圍內的最后一個海外研究中心的關閉。這個消息是否是真的&#xff0c;目前得到的印證來自其研發中心的首席科學家王敏捷在…

Python中的決策樹機器學習模型簡要介紹和代碼示例(基于sklearn)

一、決策樹定義 決策樹是一種監督學習算法&#xff0c;可用于**分類&#xff08;Classification&#xff09;和回歸&#xff08;Regression&#xff09;**任務。 它的結構類似樹狀結構&#xff1a; 內部節點&#xff1a;特征條件&#xff08;如X > 2&#xff09;葉子節點&am…

Redis集群分布式(Redis Cluster)底層實現原理詳細介紹

文章目錄一、Redis集群概念二、集群節點1. 節點如何啟動2. 節點的集群數據結構2.1 clusterNode結構2.2 clusterLink結構2.3 clusterState結構3. 節點如何加入集群三、數據分片機制1. 記錄節點的槽指派信息2. 傳播節點的槽指派信息3. 記錄集群所有槽的指派信息4. 節點的槽指派命…

【走遍美國精講筆記】第 1 課:林登大街 46 號

ACT 1-1 “我可以給您和您的小男孩拍張照嗎&#xff1f;” 【故事梗概】 自由攝影藝術家 Richard Stewart&#xff0c;正在為編出自己的影集《走遍美國》到處拍照。今天他在由紐約市曼哈頓區到斯塔滕島的渡船上工 作&#xff0c;回程中遇到了來自加州的一位黑人婦女 Martha Van…

Java中Lambda 表達式的解釋

從 Java 8 開始&#xff0c;Lambda 表達式成為 Java 的一等公民。它不僅讓代碼更簡潔&#xff0c;還為函數式編程打開了大門。如果你還沒真正理解或使用過 Lambda&#xff0c;這篇文章就是為你寫的。一、什么是 Lambda 表達式&#xff1f;Lambda 表達式是 Java 中的一種匿名函數…