baseline的测量

1. 思路

  1. 聊天记录提取信息
  2. 明确实验目的
  3. 对代码修改,提高通用性
  4. 找到实验setting
  5. 明确要测量的项目
  6. 进行测量

2. 聊天记录提取信息

2.29前
  1. 论文地址:https://www.overleaf.com/7297441691dtqyphwvrrqq

  2. Github地址:https://github.com/huaxiuyao/Graph_Classification_Transfer

  3. 参考论文资料:

    1. Differentiable Pooling: https://arxiv.org/abs/1806.08804
    2. Graph U-Nets: https://arxiv.org/abs/1905.05178
    3. end-to-end: https://www.cse.wustl.edu/~muhan/papers/AAAI_2018_DGCNN.pdf
  4. 数据资料:https://www.dropbox.com/sh/u9o0n2r2ulxoewk/AADrlBOWsdjwyJbINEMqESUka?dl=0
  5. 数据的基本描述:https://github.com/shiruipan/graph_datasets
2.29
  1. 我的setting和他们的不太一样,他们是增加一些新类的图,就比如说我本来有10个类,然后我后面又多来了3个类的图。这三个类的图是小样本的,前面10个类可以是可以不是。

  2. 我的图采样自不同数据集,比如人体的不同部位的分子,预测分子活性。那么我现在假设一共有10个部位,5个很多,5个很少,那我需要的就是对那个很少的做预测。

  3. 那么我的baseline有这么几种:1.假设不做transfer,只用很少的数据训练一个模型;2. 做transfer的;3.我改进的。

    baseline是什么含义,为什么“我改进的”也算作baseline?

  4. timeline: 3.15之前测一下baseline,4.10好之前弄一下我们的模型,4.20出完实验结果。

  5. 你先用NCI数据集,这个数据是一个癌症分子的数据集。data_generatar->load_data,里面特征我提取好了,然后每一张图有一个标签,是一个二分类问题。

  6. 这三篇论文看一下,会用来当作baseline。

  7. 实验设置你默认的就行了,如果结果太差,调一下lr,一半就好了,其他不用管。

3.2
  1. 你自己研究一下吧,就是meta-training的NCI数据集和testing需要不一样。然后你可以随便选择比如5个作为meta-training,剩下的作为meta-testing。

3.4
  1. 这样说,你要把method调成maml,你就看method调成maml的,protorypical network我应该也写了,那个matching是我们的方法。

  2. 咱们用到的模型的关系,就是maml、prototypical network,然后我们的模型。maml和prototypical network的base learner你可以先用最简单的。

  3. 比如说DGCNN,我应该实现的是这个,base learner用DGCNN就是GCN,GAT没用。

  4. 随便测吧先,我也是随便调的,然后又看起来还可以的结果,测试的时候是这样的,你可以确定几个NCI的数据作为meta-train的数据集,然后留几个作为meta-test。

3.6
  1. 你把这个数据集也熟悉一下,ogbg-mol,应该是根据这个数据来的 http://moleculenet.ai/datasets-1,你后面需要处理一下这个数据可能。

  2. 就是我们认为分子的一些性质之间是可以transfer的。有的性质容易度量,有的不容易,我们用一些性质作为meta-train,一些做meta-test,这个应该没问题。

  3. 那个化学的工具包你也装一下,处理这个的文件我写好的,data_preprocess.py,https://www.rdkit.org/, https://rdkit.readthedocs.io/en/latest/, 你不用熟悉了,只要安装完,输入就可以了,我都处理好的。

  4. 你先不用管这个数据,我们先搞nci数据集,搞完再来搞新的数据。

3.10
  1. 你先测maml好了,还有prototypical net,那个我也写过了我记得,参数随便设置,shot_num设置成5或者10吧,先把每个baseline跑通。

  2. 然后测试一个不transfer的,只用base learner的,就是比如只用几个样本,这个很差就是了。

  3. 然后测一个finetune,finetune就是你把所有的source的数据合起来,然后train一个模型,在test的domain上finetune。

  4. 所有source是什么意思,你不是有几个nci数据作为source嘛,几个作为target,你就把那个source的数据都混在一起,训练一个模型。

3.16
  1. 现在代码我自己觉得非常熟悉了。问题主要有三个:

    1. Maml, proto, gcn应该分别采取怎样的输入和参数设置进行训练?其中maml和proto还好,中午的时候我可以跟学长聊一下确认一下;关键是gcn,我不太清楚是按照最传统的,将8个文件分batch传进去训练,还是在一定意义上和proto保持相同的输入;
    2. acc的问题,训练100次maml的accu是0.64,proto是0.56,其中maml的我跟论文和网上代码完全比对了,没有问题;proto正在看,没有完全比对;gcn的因为不清楚参数设置先不说accu;
    3. fine-tune的设置问题,我参看网上相关内容,maml的训练结果就是fine-tune,然后学长说的是把所有数据输入,还是没有特别清楚。
  2. image-20200719131332062
    image-20200719131332062
  3. 语音1:所有的meta learning里面,最外层的第一层batch叫meta batch.

    语音2:我们的问题中,我们的meta-batch是每一个数据集,就是说,每一个batch是random sample一个数据集。

    语音3:这个对应maml里面的一个meta-batch。再在这个数据集里面sample一个很小样本的数据,每一类5个的话,两个类一共10个。

    语音4:参数的话你随便调一调,能跑到接近收敛就可以了。

    语音5:GCN是这样的,我们在不transfer knowledge的时候就测这个GCN, 我们只用10个数据测这个GCN,估计效果极差。你可以先不测,先把maml和proto测了。

    语音6:fine-tune是这个意思,maml是一种finetune。但是我说的finetune的意思是说,maml我train的时候每一个task数据adapt,我先不adapt,所有数据,你不区分nci哪一个数据集,不区分它任何一个数据集。因为它label都是一样的。对我来说,我所有的图,我把所有的数据合在一起,用这个数据集来train,再finetune,这么个意思。

  4. 几个问题:

    1. 问题1:fine-tune用哪个模型测(maml,proto还是gcn)?
    2. 问题2:fine-tune的区别在于将图中Step1的 8选1 换成 将8个文件合在一起?
    3. 问题3:fine-tune时gcn的设置和非fine-tune时gcn设置一致吗?非fine-tune时gcn的设置这样可以吗:从8个文件的数据集中,只选10(左右)个图进行train,20个test,剩下所有(上千个)图进行eval ?
    4. 问题4: 我已经跑出maml和proto了, 下一步是跑出gcn和fine-tune。按照刚才讨论我懂了,一会就能跑完,下一步应该做什么?
  5. 肯定是GCN,maml的base model来测,他只是把maml的finetune机制换成了最简单的finetune。

3.17
  1. gcn100epoch 0.575,finetune100epoch 0.570。

  2. 你check一下,finetune不可能会比gcn差,finetune的训练样本是source几个数据集混合的所有样本。

  3. 1000个图跑了100个epoch,结果是0.5673.现在开始跑全样本的finetune。

  4. fine-tune的值,我用9个数据集一起训练,1000个图test,100个epoch,值0.62537。

  5. test要用数据集,先6个train,3个test好了。一定要按照数据集划分,不能70%。

3.18
  1. 100个epoch0.59988.

  2. 你跑一下maml对比一下,以及,每个test数据集都出一个结果。train和test,保证要和finetune一样,meta-train就是fine-tune的那几个train的数据集,meta-test就是test的数据集。

  3. 有点问题,你写的代码maml的meta-train生成batch的时候是所有batch从一个数据集生成。

  4. 不是,有个参数,train_graph_list,整个过程是[metabatch,batch,剩下]。meta-batch中每一次是采样一个数据集,batch是这个数据集的一个图,这样就是[数据集,图,剩下]。

    我刚看了一遍,是的,就是batch_n是那个数据集的batch,后面有个shot,是这个数据集里面graph的batch。

    把train_graph_list改成6个就可以了,实验时6个数据集固定,来help另外几个。

3.20
  1. 你现在要做这个几个事情,:

    1. 我原来的model简单的gcn+meanpool,改成diffpool。
    2. 把所有baseline测完,结果整理好。
    3. 然后这两天给个模型让你实现下。

3. 明确实验目的

其实就是想做transfer,transfer就是大数据集中一部分知识用来train,一部分用来transfer到其它的数据集上面。

数据方面:

现在用的是NCI数据集,它有9个部分,然后每个里面都有很多图,标签有两个。train_graph_list 包含6个部分,test_graph_list包含3个部分。meta_train_graphset包含两个部分,pos和neg部分;meta_test_graphset也是pos和neg两个部分。

参数含义:
  • train_graph_list: train用的数据集标签。
  • meta_train_graphset: train用的数据集。
  • batch_n: 就是ways个数,生成batch_n个数的task。
  • shot_num: 生成shot_num的shot。
  • test_graphs: 生成shot_num+test_graphs个数的test数据部分。
  • generate_test_batch: 没用用batch_n参数,相当于只有一个way,一个task。
  • meta-training:是指train阶段,对应NCI中几个部位的数据集(数量较多);meta-test是指eval阶段,对应NCI中几个数量较少的部位的数据集,最外层。
MAML方法:

就是正宗的MAML,在6个数据集上meta-train,每次准备几个task,train然后eval。然后再在1个数据集上meta-test,每次准备一个task,train然后eval。base learner可替换。

Prototype方法:

和MAML对数据的利用一样,方法不一样而已,base learner可替换。

Transfer:

在数据多的部分meta-train,在数据少的部分meta-test。

fine-tune现在方法(只用GCN的方法)这里可能有问题

把5个数据集的数据一起输入作为训练数据,然后loss进行backward;4个数据集的数据算出loss,然后取平均作为每个epoch输出的loss。

GCN我理解的方法:

不在6个数据集上训练,直接在剩下3个数据集上测试meta-eval。

Fine-tune调整后方法:

与maml选用数据集对应,meta-train对应train,meta-test对应eval。数据集划分固定,每个test数据集都出一个结果。train阶段:选用GCN,在每个epoch将MAML生成的4个task的train、test部分数据合在一起用来训练,用这个loss进行backward;然后用test部分算出loss,取平均作为每个epoch输出显示的loss。eval阶段:选用GCN,每个epoch生成1个task,train部分更新fast_weights,并进行预测,然后用test部分的loss进行backward。

4. 对代码进行修改

  • base learner: GCN, DIFFPOOL
  • Meta learner: base, Finetune, MAML, Proto

5. 找到实验setting

之前的表格:
image-20200720120008256
image-20200720120008256
现在的表格:
image-20200720205012505
image-20200720205012505
Base-GCN的setting:

不用meta-train部分,直接用meta-test,也就是eval函数训练。每次用2*10个数据训练,梯度下降,然后在2*20个数据上测试。

Base-graphpool的setting:

将base_learner改成diffpool,其它不调整。

其余setting按照之前的设定。

6. 测量阶段

Model NCI1 NCI33 NCI41 NCI47
Base-GCN 0.5925 0.6223 0.61275 0.61325
Base-graphpool 0.5925 0.62225 0.61275 0.61325
Finetune-GCN 0.6264166666666667 0.6219583333333334 0.61925 0.6272083333333334
10-shot Finetune-graphpool 0.6190416666666667 0.6343333333333334 0.621 0.6313333333333334
MAML-GCN 0.7091000000000001 0.7122 0.6806 0.6853
MAML-graphpool 0.66865 0.6791250000000001 0.6581999999999999 0.6744000000000001
Protonet-GCN 0.6983 0.7001000000000001 0.672425 0.68135
Protonet-graphpool 0.6075250000000001 0.624025 0.6078500000000001 0.622875
HMGFL(ours)