[每周碎片知识] 1

  • nn对参数的初始化方式非常敏感,我用randn初始化时,怎么都不收敛(即便是只有一条数据的训练集),后来用xavier_uniform_之后结果大大改善。
for name, params in xlnet.named_parameters():
    if params.dim() >1:
        torch.nn.init.xavier_uniform_(params)
        print(name)
  • 去掉极端数据(非常长但是个数很少的句子)可以显著提高GPU的利用率
  • 当CNN遇到CTC,哪些因素会影响模型的收敛?

CNN的kernal size和stride会影响模型的收敛,ks尽量大一些,stride应当接近或低于ks的一半。

一个极端的例子:ks=3,stride=2,很难收敛,因为帧与帧之间有很高的相似性,这样卷积后不同帧之间的差别就更小了,不利于后续的分类。

  • pytorch查看模型参数量:
model = Model()
print('total parameters:', sum(param.numel() for param in model.parameters()))
  • low gpu util  遇到这种问题尽量不要用下面的代码显式删除变量
del loss,targets_mask,targets,input_q,target_mapping,perm_mask,input_mask,input_k
torch.cuda.empty_cache()    
  • transformer的layer最好抽象出来,不要自己建立参数,因为会用到index,backward过程慢。
self.q_proj_weight = nn.Parameter(torch.randn(self.n_layer, self.d_model,
                                                      self.n_head, self.d_head))
  • linux查看cpu核数:https://www.cnblogs.com/emanlee/p/3587571.html
  • 有一些线性变换是不需要加bias的(一般bias都是某一层layer的输出后者最后网络的输出才加),过多的bias会导致模型不能拟合(一直在某个点打转),比如self attention中的线性proj就bias就不需要。

你可能感兴趣的:(工具性知识点)