如何读懂深度学习项目python代码-慢慢调试

以文章multi-label learning from single positive为例;

  • 手动print打印出你不懂的地方;
  • 把不会的地方单独拎出来,重新创建一个小文件单独运行;
  • 问神奇的chatgpt,github上有个学术型chatgpt可以帮你读懂项目代码;

手动print

最笨的方法啦!不过还是要知道到底要看哪些东西,比如说对于一个函数而言,先看输入输出;
对于一个变量,以tensor为例,主要看它的形状,那么就这么写:print(f"label.shape : {label.shape}"),打印出来(16, 81),就表示batch size = 16, 每一个instance对应有81个class,还可以看它其中的值,比如想观察其中一个instance对应的数据,就这么写:print(f"label[0] : {label[0]}"),打印出来的是每一个instance而言,每一个类是真是标记的概率,会是一个长度为81的tensor,每个值是属于[0, 1]的一个数字;

就这样,哪里不会点哪里;

拎出来

这个就很有技巧了;
我一般是用Jupyter Notebook,单独创建一个.ipynb程序来写;
创建.ipynb文件常常会有问题,在Vscode中需要下载相关插件;
会遇到问你选择什么kernal,一般也就是问你要用conda里哪个环境;
还会遇到编译器不知道你的根目录在哪里,也就是相对于直接用python train.py运行程序时那个开始目录,有可能会出错;

相对路径错了,记得改用绝对路径;

(1)实在不知道哪里重不重要,把前面所有代码都搬过来

属于一脸懵逼的人,那就大把大把的复制过来吧,把需要的所有变量啊,参数啊都准备哈,再运行下边的;

(2)知道上文输入这块的是什么,也知道下文要输出什么

比如说,我想要研究class ds_model(Dataset),那我文件里只写这个class,需要什么输入呢?是一个Dataset类,是从torch里面调出来的,那没事了,我直接from torch.blabla import Dataset
又比如,我想看source_data = load_data(data_base, P),到底是啥,我跑到load_data函数里看,需要一个Dataset类别,大手一挥自己继承torch里面的Dataset自己又写了一个新的类别,就能运行这个函数了;

上面的还属于比较低级的阶段,下面可以玩的更高级一点;
想一想为什么要输出Dataset,因为要获得数据和标签;为什么要获得数据和标签,因为要算loss;怎么算loss,把那几个tensor乘几下,blabla;然后一拍脑袋,反手写了几个对应形状的tensor,其中数值在[0, 1]之间,就把程序调通了,还因为数据用的特别简单,反而更清楚它在干什么了;
(当然你不可以转牛角尖说电脑里底层都是用0和1在做运算,所以我写一堆0和1 blabla,呵呵呵)

多在.ipynb鼓捣鼓捣就知道程序到底在干什么了,整体看不懂就把局部单独拎出来跑;

神奇的chatgpt

学术版chatgpt

你可以问学术版的chatgpt(from github),我还没有用,因为配置很麻烦;

普通的chatgpt

提问也是很有技巧性的,首先要描述清楚问题是什么,最好要举个例子,举例子的效果非常非常非常好!
比如,最笨的问法是:“下面这段话什么意思?blabla”
聪明一点是:“下面这段话是这个意思吗?我觉得可能是blabla”
哦,还要提醒,他有可能一本正经的胡说八道,记得自己去验证;

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

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

相关文章

对象的常见的方法

获取对象的键值对数量: 你可以使用 Object.keys()、Object.values() 或 Object.entries() 方法来获取对象的键、值或键值对数组,并然后获取数组的长度。 var person { name: "John", age: 30 }; var keys Object.keys(person); // 获取键的…

4.1 Bloom算法

一、Bloom算法介绍 1.具体效果 2.实现思路 先将原图按照一定阈值提取较亮的区域模糊提取出的图像将模糊过的图像与原图混合 3.HDR与LDR LDR(Low Dynamic Range,低动态范围) JPG、PNG格式图片RGB范围在[0,1]之间 HDR(High Dynam…

RabbitMQ之队列Queue参数详解

public Queue( String name, boolean durable,boolean exclusive, boolean autoDelete, Map<String, Object> arguments) 分别是 name-队列标识&#xff0c;名称durable-queue队列是否持久化&#xff0c;rabbit宕机重启后&#xff0c;queue是否能被重新加载&#xff0c…

计算机网络第3章-TCP协议(2)

TCP拥塞控制 TCP拥塞控制的三种方式&#xff1a; 慢启动、拥塞避免、快速恢复 慢启动 当一条TCP连接开始时&#xff0c;cwnd的值是一个很小的MSS值&#xff0c;这使得初始发送速率大约为MSS/RTT。 在慢启动状态&#xff0c;cwnd的值以1个MSS开始并且每当传输的报文段首次被…

使用Hystrix实现请求合并,降低服务器并发压力

1.引入Hystrix <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency> 2.在启动类上开启Hystrix功能 EnableHystrix 3.请求合并实现代码 import com…

解决Linux Debian12系统中安装VirtualBox虚拟机无法使用USB设备的问题

Debian12系统中安装VirtualBox&#xff0c;再VirtualBox虚拟机中无法使用 USB设备。如下图所示&#xff1a; 解决方法如下&#xff1a; 1.安装 Virtualbox增强功能。如下图所示&#xff1a; 2.添加相关用户、用户组&#xff08; Virtualbox 装完成后会有 vboxusers 和 vboxs…

Linux 网络驱动实验(PHY芯片LAN8720)

目录 嵌入式网络简介嵌入式下的网络硬件接口MII/RMII 接口MDIO 接口RJ45 接口I.MX6ULL ENET 接口简介 PHY 芯片详解PHY 基础知识简介LAN8720A 详解SR8201F 详解 Linux 内核网络驱动框架net_device 结构体net_device_ops 结构体sk_buff 结构体网络NAPI 处理机制 I.MX6ULL 网络驱…

SQL SERVER 表分区

1. 概要说明 SQL SERVER的表分区功能是为了将一个大表&#xff08;表中含有非常多条数据&#xff09;的数据根据某条件&#xff08;仅限该表的主键&#xff09;拆分成多个文件存放&#xff0c;以提高查询数据时的效率。创建表分区的主要步骤是 1、确定需要以哪一个字段作为分…

vite vue3 ts 使用sass 设置样式变量 和重置默认样式

1.安装scss 样式支持依赖 yarn add -D sass 2.使用sass <div><!-- 测试使用sass --><h1>测试使用sass</h1> </div><style scope lang"scss"> div {h1 {color: red;} } </style> 效果&#xff1a; 3.通过npm下载并复制…

Spring Cloud之Gateway网关学习【详细】

目录 统一网关Gateway 网关的实现 搭建网关 编写配置文件 路由断言工程 路由的过滤器 全局过滤器 网关过滤器执行顺序 网关的cors跨域配置 问题及解决 统一网关Gateway 网关的实现 SpringCloud中存在两种网关 gateway&#xff1a;基于Spring5中提供的WebFlux实现&a…

docker导致远程主机无法访问,docker网段冲突导致主机网络异常无法访问

背景&#xff1a; 公司分配的虚拟机是172网段的&#xff0c;在上面部署了docker、docker-compose、mysql、redis,程序用docker-compose管理&#xff0c;也平稳运行了一个多周&#xff0c;某天用FinalShell连主机重启docker容器&#xff0c;忽然断开连接&#xff0c;然后虚拟机就…

【base64加密】js/ts的基础加密

base64的字符串简单加密&#xff0c;主用于网页缓存数据的加密。 适用于常规html、小游戏&#xff08;egret、cocos、laya&#xff09;等 原文参考&#xff1a;JS基于base64编码加密解密文本和图片&#xff08;修订&#xff09;_js base64加密-CSDN博客 测试&#xff1a;JS实…

JAVA安全入门之反射

反射 对于反射这个概念来说&#xff0c;直白的讲就是&#xff1a; 对象可以通过反射获取他的类&#xff0c;类可以通过反射拿到所有⽅法&#xff08;包括私有&#xff09;&#xff0c;拿到的⽅法可以调⽤而众所周知 JAVA 是一门静态语言&#xff0c;我们通过反射就可以达到动…

322. 零钱兑换 279.完全平方数

322. 零钱兑换 题目&#xff1a; 给一个不同数额硬币的数组和一个目标金额&#xff0c;硬币可取无限次&#xff0c;求用硬币达到总金额的最小硬币数量。&#xff08;求不同组合数/排列数&#xff0c;但是硬币数量最小&#xff09; 思路&#xff1a; 求硬币数量最小&#x…

数据中台租户概念

数据中台是一种将数据作为核心资源进行管理和共享的架构模式。它通过集中管理组织内部各个业务系统产生的数据&#xff0c;并提供一套通用的数据服务和工具&#xff0c;以满足不同业务需求的数据访问、整合和分析等需求。 在数据中台中引入了租户的概念&#xff0c;租户是指数…

Unity 粒子特效-第三集-星星闪烁特效

一、特效预览 二、制作原理 星星素材资源 链接&#xff1a;https://pan.baidu.com/s/17D-9sC-ErtqmUxl81Ln1Mw?pwdndm9 提取码&#xff1a;ndm9 1.素材介绍 仔细看&#xff0c;我们的粒子贴图是&#xff08;如下&#xff09;&#xff0c;一颗星星 2.步骤介绍 1.星星动画的…

【如何写论文】硕博学位论文的结构框架、过程与大纲分析

硕士论文可以说是毕业前最重要的一部分&#xff0c;也可以说是展示和检验你3年研究生学习的成果的一个考试。硕士论文答辩和检验合格&#xff0c;才能够顺利拿到毕业生和学位证&#xff0c;可见其重要性。 目录 一、基础框架1.1、摘要&#xff08;Abstract&#xff09;1.2、绪论…

MySQL WITH AS及递归查询

MySQL WITH AS及递归查询 WITH AS 官网&#xff1a;WITH 是 SQL 中的一个关键字&#xff0c;用于创建临时表达式&#xff08;也称为 Common Table Expression&#xff0c;CTE&#xff09;&#xff0c;它允许你在一个查询中临时定义一个表达式&#xff0c;然后在后续的查询中引…

【多线程面试题十五】、synchronized可以修饰静态方法和静态代码块吗?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;synchronized可以修饰静…

灯串上亚马逊加拿大合规标准CSA认证如何办理?

灯串 灯串和配件都是插头连接的便携式、临时性商品&#xff0c;最大额定输入电压为 120 伏。 本政策适用于季节性照明、装饰性灯具以及灯串。 亚马逊灯串政策 根据亚马逊的要求&#xff0c;所有季节性和装饰性灯串均应经过检测&#xff0c;并且遵守下列法规、标准和要求&…