【问题标题】:PyTorch element-wise filter layerPyTorch 逐元素过滤层
【发布时间】:2019-01-29 12:42:23
【问题描述】:

您好,我想添加逐元素乘法层以将输入复制到多通道,如图所示。 (所以,输入大小 M x N 和乘法滤波器大小 M x N 是一样的),如图所示

我想为过滤器添加自定义初始化值,并且还希望它们在训练时获得梯度。但是,我在 PyTorch 中找不到元素过滤层。我能做到吗?还是在 PyTorch 中是不可能的?

【问题讨论】:

    标签: python neural-network pytorch conv-neural-network


    【解决方案1】:

    在 pytorch 中,您始终可以通过使它们成为 nn.Module 的子类来实现自己的层。您还可以使用nn.Parameter 在您的层中拥有可训练的参数。
    这种层的可能实现可能看起来像

    import torch
    from torch import nn
    
    class TrainableEltwiseLayer(nn.Module)
      def __init__(self, n, h, w):
        super(TrainableEltwiseLayer, self).__init__()
        self.weights = nn.Parameter(torch.Tensor(1, n, h, w))  # define the trainable parameter
    
      def forward(self, x):
        # assuming x is of size b-1-h-w
        return x * self.weights  # element-wise multiplication
    

    您仍然需要担心初始化权重。查看nn.init 初始化权重的方法。通常在训练之前和加载任何存储的模型之前初始化所有网络的权重(因此部分训练的模型可以覆盖随机初始化)。类似的东西

    model = mymodel(*args, **kwargs)  # instantiate a model
    for m in model.modules():
      if isinstance(m, nn.Conv2d):
         nn.init.normal_(m.weights.data)  # init for conv layers
      if isinstance(m, TrainableEltwiseLayer):
         nn.init.constant_(m.weights.data, 1)  # init your weights here...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-16
      • 1970-01-01
      • 2019-10-13
      • 1970-01-01
      • 2019-04-20
      • 1970-01-01
      • 2021-04-11
      相关资源
      最近更新 更多