PyTorch 逐元素过滤层

S. *_*ong 4 python neural-network python-3.x pytorch

嗨,我想添加逐元素乘法层以将输入复制到多通道,如图所示。(因此,输入大小 M x N 和乘法滤波器大小 M x N 相同),如图所示

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

Sha*_*hai 6

在 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
Run Code Online (Sandbox Code Playgroud)

您仍然需要担心初始化权重。研究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...
Run Code Online (Sandbox Code Playgroud)