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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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 中的一种匿名函数…