首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在pytorch中初始化不同风格的nn.Sequential块的不同层的权重?

如何在pytorch中初始化不同风格的nn.Sequential块的不同层的权重?
EN

Stack Overflow用户
提问于 2019-05-26 18:56:49
回答 2查看 1.4K关注 0票数 3

假设我有一个nn.Sequential块,它有两个线性层。我希望通过均匀分布来初始化第一层的权重,但希望将第二层的权重初始化为常量2.0。

代码语言:javascript
复制
net = nn.Sequential()
net.add_module('Linear_1', nn.Linear(2, 5, bias = False))
net.add_module('Linear_2', nn.Linear(5, 5, bias = False)
EN

回答 2

Stack Overflow用户

发布于 2019-05-27 05:20:27

有一种方法可以做到这一点:

代码语言:javascript
复制
import torch
import torch.nn as nn 

net = nn.Sequential()

ll1 = nn.Linear(2, 5, bias = False)
torch.nn.init.uniform_(ll1.weight, a=0, b=1) # a: lower_bound, b: upper_bound
net.add_module('Linear_1', ll1)
print(ll1.weight)

ll2 = nn.Linear(5, 5, bias = False)
torch.nn.init.constant_(ll2.weight, 2.0)
net.add_module('Linear_2', ll2)
print(ll2.weight)

print(net)

输出:

代码语言:javascript
复制
Parameter containing:
tensor([[0.2549, 0.7823],
        [0.3439, 0.4721],
        [0.0709, 0.6447],
        [0.3969, 0.7849],
        [0.7631, 0.5465]], requires_grad=True)

Parameter containing:
tensor([[2., 2., 2., 2., 2.],
        [2., 2., 2., 2., 2.],
        [2., 2., 2., 2., 2.],
        [2., 2., 2., 2., 2.],
        [2., 2., 2., 2., 2.]], requires_grad=True)

Sequential(
(Linear_1): Linear(in_features=2, out_features=5, bias=False)
(Linear_2): Linear(in_features=5, out_features=5, bias=False)
)
票数 2
EN

Stack Overflow用户

发布于 2019-08-26 20:00:42

在你定义了你的模块之后,你可以这样做,例如:

代码语言:javascript
复制
torch.nn.init.constant_(net.Linear_1.weight, 0.0)
torch.nn.init.xavier_normal_(net.Linear_2.weight)

用于使用不同类型的初始化来初始化不同的层。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56312886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档