zhouzaida / channel-distillation

PyTorch implementation for Channel Distillation
98 stars 17 forks source link

在训练开始的时候不计算ce和kd的loss, 只算cd的loss? #10

Open CatDroid opened 1 month ago

CatDroid commented 1 month ago

in utils/util.py

if "ce" in loss_type or "kd" in loss_type:
                return 0 if epoch <= 30 else alpha * (factor ** (epoch // 30))
            else:
                return alpha * (factor ** (epoch // 30))

根据上面的代码,在训练开始,没有计算ce和kd的loss?只靠着cd的loss计算梯度, 做参数更新? 在第30个epoch开始才计算ce kd ? 并且 权重已经衰减到 alpha * (factor ?

CatDroid commented 1 month ago

"" 并且 权重已经衰减到 alpha * (factor"" 这个 我明白了, kd 和ce 的 alpha=loss_rate= 1.0 factor=1.0 所以从第30 epoch开始,权重都是1了,只有cd的权重还在衰减。

这样一开始不计算ce kd的loss,只计算cd的loss,对精度是有帮助的?

CatDroid commented 1 month ago

还补充一个疑问"epoch // 30" 我看用的是// 也就是loss权重因子衰减不是缓慢减少的,而是阶梯下降的,这样会有什么样的好处呢? 或者说为什么不直接用 epoch / 30 , 让loss权重因子衰减是缓慢下降的?

zhouzaida commented 2 weeks ago

不好意思,回复晚了。这里的阶梯下降和学习率的下降方式类似(https://github.com/zhouzaida/channel-distillation/blob/2464d30ba01e11491e520e51be498c91f1e54b91/imagenet_train.py#L92),没有去做实验分析缓慢下降的效果