如何读懂深度学习项目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”
哦,还要提醒,他有可能一本正经的胡说八道,记得自己去验证;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值