以文章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"
哦,还要提醒,他有可能一本正经的胡说八道,记得自己去验证;