顶层设计:关于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_set 和test_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. 最终面临的大问题。
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 。
|