本文主要记录如何在pytorch中对卷积层和批归一层权重进行初始化,也就是weight和bias。
主要会用到torch的apply()函数。【apply】
apply(fn):将fn函数递归地应用到网络模型的每个子模型中,主要用在参数的初始化。
使用apply()时,需要先定义一个参数初始化的函数。
def weight_init(m):
classname = m.__class__.__name__ # 得到网络层的名字,如ConvTranspose2d
if classname.find('Conv') != -1: # 使用了find函数,如果不存在返回值为-1,所以让其不等于-1
m.weight.data.normal_(0.0, 0.02)
elif classname.find('BatchNorm') != -1:
m.weight.data.normal_(1.0, 0.02)
m.bias.data.fill_(0)
之后,定义自己的网络,得到网络模型,使用apply()函数,就可以分别对conv层和bn层进行参数初始化。
model = net()
model.apply(weight_init)
以上就可以对各层进行参数初始化。
如何查看效果呢?也就是如何查看各层的weight和bias。
需要用到上一篇文章【点此到达】中的state_dict()函数,返回网络的所有参数。具体如下:
params = model.state_dict()
for k, v in params.items():
print k # 打印网络中的变量名,找出自己想查看的参数名字,这个与自己定义网络时起的名字有关。
print params['net.convt1.weight'] # 打印convt1的weight
print params['net.convt1.bias'] # 打印convt1的bias