pytorch 共享参数方法

在很多神经网络中,往往会出现多个层共享一个权重的情况,pytorch可以快速地处理权重共享问题。

例子1:

class ConvNet(nn.Module):
    def __init__(self):
        super(ConvNet, self).__init__()
        self.conv_weight = nn.Parameter(torch.randn(3, 3, 5, 5))

    def forward(self, x):
        x = nn.functional.conv2d(x, self.conv_weight, bias=None, stride=1, padding=2, dilation=1, groups=1)
        x = nn.functional.conv2d(x, self.conv_weight.transpose(2, 3).contiguous(), bias=None, stride=1, padding=0, dilation=1,
                                 groups=1)
        return x

上边这段程序定义了两个卷积层,这两个卷积层共享一个权重conv_weight,第一个卷积层的权重是conv_weight本身,第二个卷积层是conv_weight的转置。注意在gpu上运行时,transpose()后边必须加上.contiguous()使转置操作连续化,否则会报错。

例子2:

class LinearNet(nn.Module):
    def __init__(self):
        super(LinearNet, self).__init__()
        self.linear_weight = nn.Parameter(torch.randn(3, 3))

    def forward(self, x):
        x = nn.functional.linear(x, self.linear_weight)
        x = nn.functional.linear(x, self.linear_weight.t())

        return x

这个网络实现了一个双层感知器,权重同样是一个parameter的本身及其转置。

例子3:

class LinearNet2(nn.Module):
    def __init__(self):
        super(LinearNet2, self).__init__()
        self.w = nn.Parameter(torch.FloatTensor([[1.1,0,0], [0,1,0], [0,0,1]]))

    def forward(self, x):
        x = x.mm(self.w)
        x = x.mm(self.w.t())
        return x

这个方法直接用mm函数将x与w相乘,与上边的网络效果相同。


                
  • 9
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
PyTorch中调参是神经网络训练过程中非常重要的一部分。下面我将给出一些常用的PyTorch神经网络调参方法: 1. 参数访问和修改:你可以使用`model.parameters()`方法来访问模型的所有参数。这个方法返回一个可迭代的参数列表,你可以通过遍历这个列表来访问和修改每个参数的值。例如,你可以使用`param.data`来访问参数的值,并使用`param.data = new_value`来修改参数的值。 2. 参数初始化:在PyTorch中,你可以使用不同的方法来初始化神经网络的参数PyTorch提供了一些预定义的初始化方法,比如`torch.nn.init.xavier_uniform_()`和`torch.nn.init.kaiming_normal_()`等。你可以在创建模型的时候使用这些初始化方法来初始化参数。此外,你也可以自定义初始化方法,并在模型中调用它们。可以参考中的示例代码来了解如何在PyTorch中进行参数初始化。 3. 参数绑定:在某些情况下,你可能希望共享模型中的参数。在PyTorch中,你可以通过将一个参数的引用赋给另一个参数来实现参数的绑定。这样做的好处是可以节省内存,并且可以同时更新所有绑定的参数。你可以使用`param1.data = param2.data`来将参数2绑定到参数1。 总结起来,调参是神经网络训练中的重要环节,你可以通过访问和修改参数、初始化参数以及绑定参数方法来调整神经网络的性能和表现。你可以参考和中的内容来学习更多关于在PyTorch中进行神经网络调参的方法。同样,你也可以参考中提供的教程来深入了解PyTorch的使用。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值