解决报错:Fan in and fan out can not be computed for tensor with fewer than 2 dimensions

文章目录

  • 一、问题描述
  • 二、解决方案
  • Reference

一、问题描述

当模型参数初始化使用torch.nn.init.kaiming_normal_时:

def reset_parameters(self, initializer=None):
    for weight in self.parameters():
        torch.nn.init.kaiming_normal_(weight)

然后报错如题:

Fan in and fan out can not be computed for tensor with fewer than 2 dimensions

二、解决方案

torch.nn.init.kaiming_normal_(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu')

这是因为torch.nn.init.kaiming_normal_参数初始化(其实其他大部分参数初始化API也是),该函数第一个参数tensor的维度不能小于等于二维,也就是说在问题描述代码中,for循环时存在维度为1的情况,那就多加个判断(如果是一维则增加为二维)就好了:

def reset_parameters(self, initializer=None):
    for weight in self.parameters():
        if len(weight.shape) < 2:
            torch.nn.init.kaiming_normal_(weight.unsqueeze(0))
        else:
            torch.nn.init.kaiming_normal_(weight)

Reference

[1] 深度学习参数初始化(二)Kaiming初始化 含代码

你可能感兴趣的:(深度学习,安装教程&bug解决,深度学习,Pytorch)