Python Pyrotch元件级过滤层

Python Pyrotch元件级过滤层,python,python-3.x,neural-network,pytorch,Python,Python 3.x,Neural Network,Pytorch,您好,我想添加元素乘法层,将输入复制到多个通道,如图所示。(因此,输入大小mxn和乘法滤波器大小mxn是相同的),如图所示 我想为过滤器添加自定义初始化值,还想让它们在训练时获得梯度。然而,我在PyTorch中找不到元素过滤层。我能来吗?或者说在PyTorch中这是不可能的?在PyTorch中,您可以通过将层创建为nn.Module的子类来实现自己的层。您还可以在图层中使用可训练的参数。 这一层的可能实现如下所示 import torch from torch import nn class

您好,我想添加元素乘法层,将输入复制到多个通道,如图所示。(因此,输入大小mxn和乘法滤波器大小mxn是相同的),如图所示


我想为过滤器添加自定义初始化值,还想让它们在训练时获得梯度。然而,我在PyTorch中找不到元素过滤层。我能来吗?或者说在PyTorch中这是不可能的?

在PyTorch中,您可以通过将层创建为
nn.Module
的子类来实现自己的层。您还可以在图层中使用可训练的参数。
这一层的可能实现如下所示

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
您仍然需要担心初始化权重。研究初始化权重的方法。通常一次初始化是在训练之前和加载任何存储模型之前所有网络的权重(因此部分训练的模型可以覆盖随机初始化)。差不多

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...