pytorch debug 常用工具

自动辨识图像格式可视化

import numpy as np
import matplotlib.pyplot as plt
from PIL import Imagedef convert_to_numpy(image_input):"""自动检测输入图像类型,并将其转换为NumPy数组。"""if isinstance(image_input, np.ndarray):# 输入已经是NumPy数组,直接返回return image_inputelif 'Tensor' in str(type(image_input)):# 输入是Tensor类型# 检查是否需要转换(依赖于Tensor所属的库,如PyTorch, TensorFlow等)if hasattr(image_input, 'detach'):# 假设是PyTorch Tensorimage_input = image_input.detach().cpu().numpy()else:# 假设是TensorFlow Tensor或其他框架的Tensorimage_input = image_input.numpy()# 如果Tensor有通道维度在最前面(如CHW),则需要转换为HWCif image_input.ndim == 3 and image_input.shape[0] in (1, 3):image_input = image_input.transpose(1, 2, 0)elif isinstance(image_input, Image.Image):# 输入是Pillow图像,转换为NumPy数组image_input = np.array(image_input)else:raise TypeError("Unsupported image type")# 如果图像是单通道的,且在最后一个维度(例如HxWx1),去掉该维度if image_input.ndim == 3 and image_input.shape[-1] == 1:image_input = image_input.squeeze(-1)image_np = image_input if image_np.ndim == 3 and image_np.shape[-1] == 3:plt.imshow(image_np)else:plt.imshow(image_np, cmap='viridis')plt.title(title)plt.axis('off')plt.show()def visualize_image(image_np, title="Image"):"""可视化NumPy格式的图像"""if image_np.ndim == 3 and image_np.shape[-1] == 3:plt.imshow(image_np)else:plt.imshow(image_np, cmap='gray')plt.title(title)plt.axis('off')plt.show()# 示例使用
# image_tensor, image_np, image_pil 分别代表Tensor, NumPy数组, Pillow图像的输入
# 将它们转换为NumPy数组
# image_np = convert_to_numpy(image_tensor)
# image_np = convert_to_numpy(image_np)
# image_np = convert_to_numpy(image_pil)# # 可视化图像
# visualize_image(image_np)

可视化

张量可视化

import torch
from torchvision.transforms.functional import to_pil_image
from PIL import Image
def tensor_to_pil(tensor):# 确保tensor是在CPU上tensor = tensor.cpu()# 如果tensor有一个批次维度,去除它if tensor.dim() == 4 and tensor.shape[0] == 1:tensor = tensor.squeeze(0)# 转换为PIL图像pil_image = to_pil_image(tensor)# 返回PIL图像return pil_image

tensor_to_pil( ).show()

可视化已经图像信息

def draw_np(pic_np):pic_np = np.squeeze(pic_np)plt.imshow(pic_np)# 隐藏坐标轴plt.axis('on')# 显示数据标尺plt.colorbar()# 显示图像plt.show()

def get_image_info(image):# 获取图像的模式、格式和尺寸mode = image.modeformat_ = image.formatsize = image.size# 根据图像模式推断每个通道的位数if mode in ("1", "L", "P"):bits_per_channel = 8  # 通常是8位elif mode == "RGB":bits_per_channel = 8  # 通常是8位,3通道elif mode == "RGBA":bits_per_channel = 8  # 通常是8位,4通道elif mode == "I":bits_per_channel = 32 # 整数像素模式elif mode == "F":bits_per_channel = 32 # 浮点像素模式else:bits_per_channel = 'unknown'  # 未知或不常见的模式# 计算总位数total_bits = image.getbands().__len__() * bits_per_channel# 打印图像信息print(f"Image mode: {mode}")print(f"Image format: {format_}")print(f"Image size: {size}")print(f"Bits per channel: {bits_per_channel}")print(f"Total bits per pixel: {total_bits}")#%%
import numpy as npdef get_array_info(np_array):"""获取并打印NumPy数组的详细信息。参数:np_array: NumPy数组。"""# 获取数组的形状shape = np_array.shape# 获取数组的总元素数量size = np_array.size# 获取数组的数据类型dtype = np_array.dtype# 获取数组单个元素的大小(以字节为单位)itemsize = np_array.itemsize# 获取数组的维度数量ndim = np_array.ndim# 获取数组的总字节数nbytes = np_array.nbytes# 打印数组信息print(f"Array Shape: {shape}")print(f"Array Size: {size}")print(f"Array Data Type: {dtype}")print(f"Item Size: {itemsize} bytes")print(f"Array Dimensions: {ndim}")print(f"Total Bytes: {nbytes} bytes")
def read_pic(path_pic):# 加载图像image = Image.open(path_pic)print(image.size)print(image.format)return imagedef pic_to_np(pic):np_depth = np.array(pic)return np_depthdef draw_np(pic_np):pic_np = np.squeeze(pic_np)plt.imshow(pic_np)# 隐藏坐标轴plt.axis('on')# 显示数据标尺plt.colorbar()# 显示图像plt.show()def pic_info(path):raw_image = read_pic(path)raw_np = pic_to_np(raw_image)get_image_info(raw_image)get_array_info(raw_np)raw_image.show()draw_np(raw_np)

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

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

相关文章

7-3 Left-pad

根据新浪微博上的消息,有一位开发者不满NPM(Node Package Manager)的做法,收回了自己的开源代码,其中包括一个叫left-pad的模块,就是这个模块把javascript里面的React/Babel干瘫痪了。这是个什么样的模块&a…

物联网IC

物联网IC 电子元器件百科 文章目录 物联网IC前言一、物联网IC是什么二、物联网IC的类别三、物联网IC的应用实例四、物联网IC的作用原理总结前言 物联网IC的功能和特性可以根据不同的物联网应用需求来选择和配置,以满足物联网设备在连接、通信、感知和控制方面的需求。 一、物…

猜数字游戏Ⅱ

你和朋友一起玩猜数字游戏,你写出一个秘密数字,请朋友猜这个数字是多少。朋友每猜测一次,你就会给他一个包含下述信息的提示: 猜测数字中有多少位属于数字和确切位置都猜对了(称为 "Bulls",公牛&…

VOL-vue 框架 文件上传控件关于大文件上传等待的修改

我的项目在测试voltable列表组件中对阿里云OSS做附件上传时,几十M的文件可能就会需要一段时间来上传,才能有OSS的状态和链接返回。 但是控件VolUpload.vue并没有去在这方面做任何交互体验上的控制,而且VolUpload.vue本身写的几个上传函数都是…

SpringBoo在项目停止(服务停止/关闭退出)之后执行的方法

SpringBoo在项目停止/服务停止/关闭退出之后执行的方法 1.实现DisposableBean接口2.使用PreDestroy注解 SpringApplication会向JVM注册一个关闭钩子(hook),以确保ApplicationContext在退出时正常关闭。 可以使用所有标准的Spring生命周期回调(例如Dispos…

内测分发是什么?十年的前端开发者带你了解

内测分发是软件开发过程中的一个阶段,特别指软件还未完全完成或准备对外广泛发布前,向一定范围的用户群体提供该软件版本的测试机会,以便收集反馈和修复潜在的问题。在讲解内测分发之前,我们需要明确几个相关概念: 软件…

区块链媒体宣发:揭示优势与趋势,引领信息传播新时代

在数字化潮流中,区块链技术正以惊人的速度改变着传媒行业的格局。从区块链媒体宣发中获得的种种优势和未来的趋势,不仅为企业带来了新的推广途径,也在信息传播领域掀起了一场革命。本文将深入探讨区块链媒体宣发的优势以及未来的发展趋势。 1…

排序算法---选择排序

1.实现流程&#xff1a; 1. 把第一个没有排序过的元素设置为最小值&#xff1b; 2. 遍历每个没有排序过的元素&#xff1b; 3. 如果元素 < 现在的最小值&#xff1b; 4. 将此元素设置成为新的最小值&#xff1b; 5. 将最小值和第一个没有排序过的位置交换 选择排序执行流程…

初识Ceph --组件、存储类型、存储原理

目录 ceph组件存储类型块存储文件存储对象存储 存储过程 ceph Ceph&#xff08;分布式存储系统&#xff09;是一个开源的分布式存储系统&#xff0c;设计用于提供高性能、高可靠性和可扩展性的存储服务&#xff0c;可以避免单点故障&#xff0c;支持块存储、对象存储以及文件系…

【小白专用】Apache2.4+PHP8.3+MYSQL的配置

1.下载PHP和Apache 1、PHP下载 PHP For Windows: Binaries and sources Releases 注意&#xff1a; 1.使用Apache作为服务器的话&#xff0c;一定要下载Thread Safe的&#xff0c;否则没有php8apache2_4.dll这个文件&#xff0c; 如果使用IIS的请下载 NON Tread safe的 2.如果…

USB连接器

USB连接器 电子元器件百科 文章目录 USB连接器前言一、USB连接器是什么二、USB连接器的类别三、USB连接器的应用实例四、USB连接器的作用原理总结前言 USB连接器的使用广泛,几乎所有现代电子设备都具备USB接口,使得设备之间的数据传输和充电变得简单和便捷。 一、USB连接器是…

element-ui按钮el-button,点击之后恢复之前的颜色

在开发过程中, 使用el-button 按钮点击之后, 没有恢复到之前的颜色, 还是保持点击之后的颜色,需要解决这个问题, <template><div><el-button size"mini" type"primary" plain click"onClick($event)">按钮</el-button>…

iOS按钮控件UIButton使用

1.在故事板中添加按钮控件,步聚如下: 同时按钮Shift+Commad+L在出现在控件库中选择Button并拖入View Controller Scene中 将控件与变量btnSelect关联 关联后空心变实心 如何关联?直接到属性窗口拖按钮变量到控件上,出现一条线,然后松开,这样就关联成功了 关联成功后属性窗口…

LinuxBasicsForHackers笔记 -- 了解和检查无线网络

无线网络 AP (access point) – 无线用户连接以访问互联网的设备。SSID (service set identifier) – 网络的名称。ESSID (extended service set identifier) – 与 SSID 相同&#xff0c;但它可用于无线 LAN 中的多个 AP。BSSID (basic service set identifier) – 每个AP的唯…

ISP IC/FPGA设计-第一部分-MT9V034摄像头分析(0)

MT9V034为CMOS图像传感器&#xff0c;有着极其优秀的图像成像性能&#xff0c;同时支持丰富的功能用于isp的开发&#xff1b;MT9V034 的HDR宽动态、10bit数据深度、RAW格式&#xff08;bayer阵列&#xff09;图像、dvp和lvds接口、60fps正是学习isp开发的理想传感器&#xff1b…

使用Git进行版本控制

参考&#xff1a;《Python编程从入门到实践》 前言1、安装、配置 Git1.1 在Linux系统中安装Git1.2 在OS X系统中安装Git1.3 在Windows系统中安装Git1.4 配置Git 2、创建项目3、忽略文件4、初始化仓库5、检查状态6、将文件加入到仓库中7、执行提交8、查看提交历史 前言 版本控制…

C语言 预处理 + 条件编译宏 + 井号运算符

预处理阶段任务 预处理指令 条件编译宏 条件编译宏的作用在于根据编译时的条件进行代码的选择性编译&#xff0c;从而实现不同环境、不同配置或不同功能的编译版本。 这可以用于实现调试模式和发布模式的切换&#xff0c;平台适配&#xff0c;以及选择性地编译不同的功能模块等…

Git merge 与 Git rebase 与 Git fetch

Git merge 与 Git rebase 看这个图就行了 git merge、git rebase 和 git fetch 是 Git 中的三个不同的命令&#xff0c;它们分别用于不同的目的。以下是它们的主要区别&#xff1a; git merge&#xff08;合并&#xff09;&#xff1a; 用途&#xff1a; 用于将一个分支的更改…

基于hadoop下的spark安装

目录 简介 安装准备 spark安装 配置文件配置 简介 Spark主要⽤于⼤数据的并⾏计算&#xff0c;⽽Hadoop在企业主要⽤于⼤数据的存储&#xff08;⽐如HDFS、Hive和HBase 等&#xff09;&#xff0c;以及资源调度&#xff08;Yarn&#xff09;。但是也有很多公司也在使⽤MR2进…

【Spring教程24】Spring框架实战:从零开始学习SpringMVC 之 SpringMVC入门案例代码示例

目录 1:创建Maven项目&#xff0c;并导入对应的jar包2:创建控制器类3:创建配置类4:创建Tomcat的Servlet容器配置类5:配置Tomcat环境6:启动运行项目7:浏览器访问8:知识点总结 欢迎大家回到《Java教程之Spring30天快速入门》&#xff0c;本教程所有示例均基于Maven实现&#xff0…