小tp:工作上的想法

顶层设计:关于Session

1.

首先,我有了一个输入args,它是所有的参数,有可能有多层多级。

他的下一级是args.b,而不是args["b"]。但是在下一级就不一样了,它是args.b["c"]

没办法,现在只能如此。

2.

  • loss_curve用于保存每个epoch的loss值;
  • acc_curve用于保存每个epoch的acc值;
  • best_acc用于保存最好的那个acc;
  • best_epoch用于保存最好的那个epoch

3.

关于feeder,

我们首先得到两个dataset, train_settest_set

然后,利用train_set得到两个loader,一个是train_loader,一个是memory_loader;另外就是test_set得到test_loader

4.

关于model (这块因为涉及到重构,所以问题比较多)

之前的模型是,

Backbone \(\rightarrow\) cl

也就是说,我写了两个类,一个backbone,一个是cl。我得写两套参数,然后分别把这两套参数,给传进去。

但是问题是:

如果我想要复用这套系统,那么如果有一个简单的auto-encoder并没有cl模块,不就是吃瘪了吗?

更遑论我把cl的一些功能,写进了类方法里面,也就是def _train(self):def _test(self):这俩。

所以说我们从一开始就应该打造,统一的模型,输入输出的接口啊。

另外一个需要考虑的因素

我们现在这个模型是一个训练和测试分离的模型,什么意思呢?也就是说,在训练过程中的诸多组件,在测试时并不会使用的。

5.

最后就是一些小角色,比如adam的优化器,比如cross entropy的loss,实际上我们不需要了吧

番外篇,为什么loss也需要.cuda()??

根据pytorch forum上面的讨论,如果说loss function里面没有可训练参数,那么其实也不必一定使用.cuda()

Additionally to what @royboy said, you need to push your criterion to the GPU, if it's stateful, i.e. if it has some parameters or internal states.

6. 最终面临的大问题。

  • 把无监督3个loss,变成一个东西。我们可以给3个argument parser选项,来进行ablation study

  • 换成cosine 模拟退火

  • **在nn.Module里面解耦,我们可以,用一个loss方法,作为training的公开接口,forward变成test的时候的公开接口。具体说来,我们可以在loss方法中,返回一个loss_dict

7. 该怎么把我们的net的参数进行一个解耦呢???

  • num_scale:
  • enc_in_c
  • enc_out_c
  • enc_num_layer
  • repeat_padding
  • dec_in_c
  • dec_out_c
  • dec_num_layer
  • proj_in_c
  • proj_hid_c
  • proj_out_c
  • pred_in_c
  • pred_hid_c
  • pred_out_c

还有一个参数,我觉得可以把num_classes给变成nb_class

上一篇:来自wzc的简单拓扑dp———浙江农林大学第二十届程序设计竞赛暨团体程序设计天梯赛选拔赛(同步赛)


下一篇:分类任务如何评估?