Pytorch中的kaiming_uniform中标准差stdv乘了一个因子$\sqrt{3}$ def kaiming_uniform_( tensor: Tensor, a: float = 0, mode: str = 'fan_in', nonlinearity: str = 'leaky_relu' ): #...... std = gain / math.sqrt(fan) bound = math.sqrt(3.0) * std # Calculate uniform bounds from standard deviation with torch.no_grad(): return tensor.uniform_(-bound, bound) 为什么会出现这个因子,原因其实和物理实验里B类误差需要除去$\sqrt{3}$一样。 均匀分布的方差是$Var = \frac {(b-a)^2}{12}$,而我们真正想要的bound是$(b-a)/2$,所以有$Var = \frac{1}{3} {bound}^2$,
最近看到一个写的挺好的多任务框架(https://github.com/SwinTransformer/AiT,参考了detectron2),分享一下~ 多任务训练一般分为两种:data mixing 和 batch mixing。简单来说,对于前者,一个batch中的样本可以来自不同任务,而后者一个batch中任务都是一样的。两者相比,后者实现更加容易,效率更高,并且做数据增强也更方便一点(由Pix2Seq提出,但其实数据增强我认为并不是两者的主要差异)。 先给出我写的一个batch mixing的例子(来自JJJYmmm/Pix2SeqV2-Pytorch): def get_multi_task_loaders(tokenizer,tasks): assert set(tasks) <= set(['detection', 'keypoint', 'segmentation', 'captioning']) train_loaders = {} valid_loaders = {} if 'detection' in tasks:
这两天在看PyTorch DistributedDataParallel(DDP)相关文章,发现有个系列写的还不错。 https://zhuanlan.zhihu.com/p/178402798 https://zhuanlan.zhihu.com/p/187610959 https://zhuanlan.zhihu.com/p/250471767 虽然讲的是torch.distributed.launch(快被torchrun替代),但是整个思路应该还是有参考意义的。 看的过程中遇到一些问题,顺便补几个知识点。 contextmanager decorator SyncBN 这篇写的很细,推荐精读 补充SyncBN里的一个问题:2.1.5 eval部分,在torch 1.13版本里,只要满足eval模式或track_running_stats=True,就会使用统计量(running_mean, running_var)进行计算了。源码如下: # torch.nn.modules.batchnorm return F.batch_norm( inpu
Axuanz
Updating as per fate.