首页 > 解决方案 > 如何定义在神经网络各层之间共享的单个参数?

问题描述

假设我们有以下全连接网络:

class FC(nn.Module):
  def __init__(self, imgsz=28, num_classes=10):
      super(FC, self).__init__()
      self.imgsz = imgsz
      self.fc1 = nn.Linear(imgsz*imgsz, 300)
      self.fc2 = nn.Linear(300, 100)
      self.fc3 = nn.Linear(100, num_classes)
      self.relu = nn.ReLU(inplace=True)

  def forward(self, x):
      x = x.view(-1, self.imgsz*self.imgsz)
      x = self.relu(self.fc1(x))
      x = self.relu(self.fc2(x))
      x = self.fc3(x)
      
      return x

nn.Parameter()我们如何使用或任何其他在所有层之间共享的方法来定义单个参数?

标签: pythonpytorch

解决方案


如果我正确理解您的问题,这应该可以解决您的问题。只需在初始化时添加参数。

class FC(nn.Module):
  def __init__(self, imgsz=28, num_classes=10, hidden_layer_size_1= 300, hidden_layer_size_2= 100):
      super(FC, self).__init__()
      self.imgsz = imgsz
      self.fc1 = nn.Linear(imgsz*imgsz, hidden_layer_size_1)
      self.fc2 = nn.Linear(hidden_layer_size_1, hidden_layer_size_2)
      self.fc3 = nn.Linear(hidden_layer_size_2, num_classes)
      self.relu = nn.ReLU(inplace=True)

  def forward(self, x):
      x = x.view(-1, self.imgsz*self.imgsz)
      x = self.relu(self.fc1(x))
      x = self.relu(self.fc2(x))
      x = self.fc3(x)
      
      return x

推荐阅读