cnn_trainer.md
2021/2/6
该文件包括_warmup_update_lr函数和CNNFinalTrainer类。
New Funcs
Function
_warmup_update_lr(optimizer, epoch, init_lr, warmup_epochs):更新优化器的学习率
Class
CNNFinalTrainer
继承自FinalTrainer类。
__init__方法
传入参数:modeldatasetdevicegpusobjective:和性能相关,包括get_perfsperf_names()get_loss
multiprocessepochsbatch_sizeoptimizer_typeoptimizer_kwargslearning_ratemomentumwarmup_epochsoptimizer_schedulerweight_decayno_bias_decaygrad_clipauxiliary_headauxiliary_weightadd_regularizationsave_as_state_dictworkers_per_queueeval_no_gradeval_everycalib_bn_setupschedule_cfg
*Line98(if self.multiprocess:)至Line112(num_workers=workers_per_queue, shuffle=False, **test_kwargs))设置multiprocess,是否多线程只有sampler的设置区别。
*Line122(self.last_epoch = 0)至Line127(self._is_setup = False)设置trainer的当前状态,看样子初始化后还需调用setup等方法。
-
setup方法:设置存储路径/文件/保存间隔等。 -
save方法:保存模型。 -
load方法:读model&optimzier&scheduler。 -
train方法:训练模型。流程:写log -> 过epoch,有个warm_up的判断,后面是调用下文的train_epoch与infer_epoch方法训练并eval模型,并写log,判断条件存模型。 -
evaluate_split方法:在训练集或者测试集上评估模型性能。 -
_load_state_dict方法:从state dict中读模型。 -
_init_optimizer方法:初始化optimizer。 -
_init_scheduler方法:初始化scheduler。 -
train_epoch方法:单步训练。回头好好看看? -
infer_epoch方法:evaluate一个epoch,回头也看看。 on_epoch_start&on_epoch_end方法:在epoch前后执行一些操作,奇怪的是self.model和self.objective有一些方法:self.model.on_epoch_start&self.model.on_epoch_endself.objective.on_epoch_start&self.objective.on_epoch_end
def _forward_once_for_flops方法:前传一步求flop数量。
问题集合
scheduler是什么干什么的?A:和学习率调整相关。
TO-DO
train_epoch和infer_epoch方法应该需要看看,理解pytorch。