当前位置: 首页 > news >正文

在 VS Code 中调试 Tensor 形状不显示的问题及解决方案



文章目录

  • 常见问题
  • 解决方案
    • 1. 定制类包装和 `__repr__` 方法
  • 解释
  • 如何应用
  • 总结


在使用 VS Code 调试 PyTorch 代码时,可能会遇到一个常见问题:调试时 variables 窗口中不显示 Tensor 的形状信息。这会使得调试时观察数据的结构变得不便,尤其是在处理高维度的张量时。

在这篇博客中,我将提供一个改进方案,通过自定义 __repr__ 方法,让 PyTorch Tensor 的形状在调试信息中更清晰地呈现。我们还将展示如何针对其他 Python 对象(如 listdict 以及 pandas.DataFrame)进行类似的处理,使调试时可以直观地看到这些对象的尺寸或内容。


常见问题

在调试 PyTorch 项目时,VS Code 的 variables 窗口默认不会显示张量的形状信息,除非你展开查看具体的变量内容。这种行为对于需要快速检查张量维度的场景是比较不便的。Python 的内置类型(如 boolintstr)也无法直接继承,因此我们不能简单地扩展这些类型来自定义调试信息。

为了解决这些问题,我们可以通过创建包装类(wrapper classes)或直接重写对象的 __repr__ 方法,来定制它们在调试窗口中的显示内容。


解决方案

我们可以通过以下步骤来自定义调试时 Tensor 以及其他对象的显示方式。

1. 定制类包装和 __repr__ 方法

  • 我们可以为 Python 的内置类型创建包装类,重写 __repr__ 方法以自定义它们的显示形式。
  • 对于 PyTorch 的 Tensorpandas.DataFrame,可以直接重写它们的 __repr__ 方法来显示额外的信息(如张量形状或 DataFrame 的维度)。

下面是一个完整的代码示例:

import torch
import pandas as pd# -------------------- 自定义包装类 --------------------class CustomBool:def __init__(self, value):self.value = bool(value)def __repr__(self):return f'{{bool}} {self.value}'class CustomInt:def __init__(self, value):self.value = int(value)def __repr__(self):return f'{{int}} {self.value}'class CustomStr:def __init__(self, value):self.value = str(value)def __repr__(self):return f'{{str}} {self.value}'# 自定义 list 和 dict 子类
class CustomList(list):def __repr__(self):return f'{{list: {len(self)}}} {super().__repr__()}'class CustomDict(dict):def __repr__(self):return f'{{dict: {len(self)}}} {super().__repr__()}'# 自定义 Tensor 的 __repr__ (Torch)
original_tensor_repr = torch.Tensor.__repr__
def custom_tensor_repr(self):return f'{{Tensor: {tuple(self.shape)}}} {original_tensor_repr(self)}'
torch.Tensor.__repr__ = custom_tensor_repr# 自定义 DataFrame 的 __repr__ (Pandas)
original_dataframe_repr = pd.DataFrame.__repr__
def custom_dataframe_repr(self):return f'{{DataFrame: {self.shape}}} {original_dataframe_repr(self)}'
pd.DataFrame.__repr__ = custom_dataframe_repr# 自定义 DataLoader 的类
class DataLoader:def __init__(self, data_size):self.data_size = data_sizedef __len__(self):return self.data_sizedef __repr__(self):return f'{{DataLoader: {len(self)}}} DataLoader object'# -------------------- __main__ 函数 --------------------
def main():# 使用自定义类型代替原生类型my_list = CustomList([1, 2, 3, 4, 5, 6])my_dict = CustomDict({'a': 1, 'b': 2, 'c': 3})my_bool = CustomBool(True)my_int = CustomInt(42)my_str = CustomStr("hello")# 测试 Tensormy_tensor = torch.randn(100, 512)# 测试 DataFramemy_dataframe = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})# 测试 DataLoadermy_dataloader = DataLoader(220)# 输出内容print(my_list)        # {list: 6} [1, 2, 3, 4, 5, 6]print(my_dict)        # {dict: 3} {'a': 1, 'b': 2, 'c': 3}print(my_bool)        # {bool} Trueprint(my_int)         # {int} 42print(my_str)         # {str} 'hello'print(my_tensor)      # {Tensor: (100, 512)} tensor([...])print(my_dataframe)   # {DataFrame: (3, 3)}    A  B  Cprint(my_dataloader)  # {DataLoader: 220} DataLoader object# 如果是直接运行文件,则调用 main 函数
if __name__ == "__main__":main()

解释

  1. 包装类的实现

    • 我们为 boolintstr 创建了包装类 CustomBoolCustomIntCustomStr,并通过重写 __repr__ 方法来定制它们的显示格式。
  2. 自定义 listdict

    • 使用 CustomListCustomDict 继承自 Python 的内置 listdict 类型,并且通过重写 __repr__ 方法来显示列表或字典的长度。这对于调试包含大量数据的容器类非常有用。
  3. Tensor 和 DataFrame 的自定义 __repr__

    • 我们通过直接修改 torch.Tensorpandas.DataFrame__repr__ 方法,分别让它们在打印时显示张量的形状和 DataFrame 的维度信息。这在调试过程中可以让你一眼就看到数据的结构,而不需要展开变量。
  4. DataLoader 自定义类

    • 我们还创建了一个自定义的 DataLoader 类,并重写了它的 __repr__ 方法来显示加载的数据大小。这对于在训练模型时检查数据集大小十分有用。

如何应用

  1. 直接运行

    • 你可以在 VS Code 中直接运行该文件,main() 函数会自动执行,并在控制台中打印所有对象的自定义表示。
  2. 模块化使用

    • 如果你需要将这些自定义类和方法用于其他项目,只需导入相应的类或函数即可,而无需重复定义。

总结

通过自定义 __repr__ 方法,我们成功地解决了 VS Code 中调试 Tensor 变量时无法快速查看其形状的问题。我们同样可以使用类似的方式来扩展其他数据类型,使得调试时变量信息更加直观清晰。该方法非常实用,尤其适合处理大型数据集或高维度张量的深度学习项目。

相关文章:

在 VS Code 中调试 Tensor 形状不显示的问题及解决方案

文章目录 常见问题解决方案1. 定制类包装和 __repr__ 方法 解释如何应用总结 在使用 VS Code 调试 PyTorch 代码时,可能会遇到一个常见问题:调试时 variables 窗口中不显示 Tensor 的形状信息。这会使得调试时观察数据的结构变得不便,尤其是在…...

Linux 时间获取全面总结

1. 引言 在Linux操作系统中,获取时间是一个基本且重要的功能。本文旨在全面总结Linux系统中获取时间的方法,包括命令行工具和编程接口,帮助读者深入理解Linux时间管理的机制。 2. 命令行工具 2.1 date 命令 date 命令是Linux中最常用的命…...

SQL 自学:游标(Cursors)的理解与应用

在 SQL 中,游标(Cursor)是一种用于处理从数据库中检索出的多行数据的机制。它允许我们逐行地处理查询结果集,而不是一次性处理整个结果集。 一、游标是什么 游标可以看作是一个指向结果集的指针。通过游标,我们可以在…...

IO多路复用概述与epoll简介

一、引言 在网络编程中,高并发的场景下处理大量连接请求是一项挑战。传统的阻塞式IO模型会让线程在等待数据的过程中陷入停顿,导致系统效率低下。为了解决这个问题,IO多路复用应运而生。它允许一个线程同时监听多个文件描述符(如…...

关于region_to_label算子的想法

1,定义:将区域进行编码 2,如何做到的:底层逻辑应该是paint_region。通过一个小的循环,按顺序将区域从灰度值1开始11的往上喷。 3,有什么作用:目前能用到的,是有字典的作用&#xff0…...

uni-app 实现好看易用的抽屉效果

在移动应用开发中,抽屉效果是一种常用的用户界面设计,它能有效地节省空间,同时提供导航和其他功能。本文将介绍如何在uni-app中实现一个好看且易用的抽屉效果,帮助你提升应用的用户体验。 一、什么是抽屉效果? 抽屉效…...

PowerShell 脚本 比较两文件差异(带粗狂进度条)并汇总输出

一上来就放代码 function Compare-FileHex {param ([Parameter(Mandatory$true)][string]$SourceFile,[Parameter(Mandatory$true)][string]$CompareFile,[Parameter(Mandatory$false)][string]$OutputFile,[Parameter(Mandatory$false)][int]$BufferSize 1MB)function Forma…...

学习 UE5 的一些前置操作总结

随着 Unity, Godot 这些引擎都玩抽象,主动捅自己一刀后,UE5 的风头不可谓不盛,本着多学一点免得失业的思路方针,咱也研究了一下 UE5 引擎,然后发现想要开始使用 UE5 ,包含了很多前置操作,这里总…...

C#/.NET/.NET Core技术前沿周刊 | 第 10 期(2024年10.14-10.20)

前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。 欢迎投稿、推荐…...

Git 基本配置

目录 打开 Git Bash设置用户信息查看配置信息修改电脑名字为常用指令配置别名打开用户目录,创建 .bashrc 文件在 .bashrc 文件中输入如下内容:打开gitBash,执行 source ~/.bashrc 解决GitBash乱码问题打开GitBash执行下面命令${git_home}/etc…...

理工科考研想考计算机,湖南大学、重大、哈工大威海、山东大学,该如何选择?

C哥专业提供——计软考研院校选择分析专业课备考指南规划 计算机对理工科同学来说,还是性价比很高的,具有很大的优势! 一、就业前景广阔 高需求行业 在当今数字化时代,计算机技术几乎渗透到了各个领域,无论是互联网…...

使用langchain和大模型API提取QA的实战教程

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于大模型算法的研究与应用。曾担任百度千帆大模型比赛、BPAA算法大赛评委,编写微软OpenAI考试认证指导手册。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。授权多项发明专利。对机器学…...

Java面试场景题(1)---如何使用redis记录上亿用户连续登陆天数

感谢uu们的观看,话不多说开始~ 对于这个问题,我们需要先来了解一下~ 海量数据都可以用bitmap来存储,因为占得内存小,速度也很快 我大概计算了一下~ 完全够:String类型512M 1byte 8个bit位 8个状态 512M1024byt…...

Element UI

Element ui 就是基于vue的一个ui框架,该框架基于vue开发了很多相关组件,方便我们快速开发页面。 官网: https://element.eleme.io/#/zh-CN 安装Element UI vue init webpack element(项目名)确认项目是否构建成功:进入到项目的根路径 执行 npm start 访问 h…...

②PROFINET转ModbusTCP, EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关

EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关https://item.taobao.com/item.htm?ftt&id822721028899 协议转换通信网关 PROFINET 转 Modbus TCP (接上一章) 配置使用 与 PROFINET 主站进行组态说明 这里介绍与西门子 PLC 的…...

python+Mosh网课笔记04

太久没写python代码了,学机器学习重新拾起python,笔记比较简陋。 参考:mosh python网课 一、导入同一文件夹下其他文件 first.py def swim():print("swim")def run():print("run")同一个文件夹下的second.py from f…...

【微服务】全面构建微服务监控体系:确保系统稳定与性能优化的关键

目录 引言一、微服务监控概述1.1 微服务监控的定义1.2 微服务监控的重要性1.3 监控的核心目标1.4 微服务监控的关键指标1.5 监控的策略 二、微服务监控的架构2.1 监控架构图2.2 架构组件2.3 监控架构示意图 三、微服务监控的工具3.1 工具概述3.2 Prometheus3.3 Grafana3.4 ELK …...

Gin框架操作指南08:日志与安全

官方文档地址(中文):https://gin-gonic.com/zh-cn/docs/ 注:本教程采用工作区机制,所以一个项目下载了Gin框架,其余项目就无需重复下载,想了解的读者可阅读第一节:Gin操作指南&#…...

鸿蒙系统 VS 安卓系统,谁将引领未来移动操作系统?

文章目录 1. 系统架构:微内核 vs 宏内核2. 设备生态:单设备 vs 全场景分布式3. 开发生态:安卓主导地位 vs 鸿蒙迅速崛起4. 性能与流畅度:安卓优化 vs 鸿蒙调度优势5. 安全性:Google 主导 vs 微内核高安全6. 市场影响力…...

PyTorch 中 functional.py 文件介绍

PyTorch PyTorch 是一个开源的机器学习库,广泛用于计算机视觉和自然语言处理等应用。它由 Facebook 的人工智能研究团队开发,并得到了许多研究机构和企业的支持。PyTorch 以其易用性、灵活性和强大的社区支持而受到欢迎。一些特点如下: 动态…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合

作者&#xff1a;来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布&#xff0c;Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明&#xff0c;Elastic 作为 …...