欢迎光临散文网 会员登陆 & 注册

第十八篇—模型参数的访问、初始化和共享

2023-02-16 16:25 作者:YouOnly_LiveOnce  | 我要投稿


部分一:模型参数的访问

通过Module类的parameters()或named_parameters()方法访问模型参数;

代码实现:

打印结果:

可以发现,named_parameters()方法是通过生成器来访问模型参数的,关于生成器generator可参考算法岗面试总结—Python篇;对于通过Sequential类构造的网络,可以进行单层的访问:

结果:

注意:

Parameter类是Tensor类的子类,如果一个Tensor是Parameter,则会被自动添加到模型的参数列表:

因为Parameter类是Tensor的子类,所以可由data访问参数值,由grad访问梯度:

结果:



部分二:模型参数的初始化

例如,将权重参数初始化成均值为0,标准差为0.01的正态分布随机数,偏差参数清零:

结果:

自定义初始化方法:使权重有一半的概率初始化为0,有另一半的概率初始化为[-10,-5]和[5,10]两个区间里均匀分布的随机数,代码实现如下;

结果:

我们可以通过data来改写模型的参数值,而不影响梯度:

结果:



部分三:模型参数的共享

如果Sequential里是同一个Module实例,则这些Module实例的参数共享,代码实现如下:

结果:

实际上,在内存中,这两个Module实例其实是同一个对象:

模型参数里包含了梯度,所以在反向传播计算时,共享的参数的梯度会进行累加:

结果:


第十八篇—模型参数的访问、初始化和共享的评论 (共 条)

分享到微博请遵守国家法律