动手学习深度学习笔记4:自定义含模型参数的层

        在学习笔记3中我们知道Parameter 也是属于Tensor的一个子类,如果定义了一个Parameter,他会被自动添加到模型的参数中。所以在定义含模型参数的层时,使用Parameter即可,或者是我们也可以使用ParameterList或ParameterDict。下面以ParameterList为例,描述使用方法,ParameterDict的使用方法参见这里

class MyDense(nn.Module):
    def __init__(self):
        super(MyDense, self).__init__()
        self.params = nn.ParameterList([nn.Parameter(torch.randn(4, 4)) for i in range(3)])
        self.params.append(nn.Parameter(torch.randn(4, 1)))

    def forward(self, x, index):
        x = torch.mm(x, self.params[index])
        return x
net = MyDense()
print(net)

'''输出
MyDense(
  (params): ParameterList(
      (0): Parameter containing: [torch.FloatTensor of size 4x4]
      (1): Parameter containing: [torch.FloatTensor of size 4x4]
      (2): Parameter containing: [torch.FloatTensor of size 4x4]
      (3): Parameter containing: [torch.FloatTensor of size 4x1]
  )
)
'''

这样就可以根据索引来访问某个参数,并进行不同的前向传播:

x = torch.ones(1, 4)
print(net(x, 0))
print(net(x, 1))
print(net(x, 2))

'''输出
tensor([[ 0.2612, -0.8207,  2.6069,  3.1468]], grad_fn=<MmBackward>)
tensor([[-4.4122, -0.6476,  3.8580, -2.4974]], grad_fn=<MmBackward>)
tensor([[ 0.6796, -2.4097, -1.8445,  2.7097]], grad_fn=<MmBackward>)
'''
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值