Как уменьшить размеры тензора с помощью нейронных сетей - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть 3D-тензор размера [100,70,42] (batch, seq_len, features), и я хотел бы получить тензор размера [100,1,1], используя нейронную сеть на основе линейных преобразований(nn.Linear в Pytorch).

Я реализовал следующий код

class Network(nn.Module):
   def __init__(self):
      super(Network, self).__init__()
      self.fc1 = nn.Linear(42, 120)
      self.fc2 = nn.Linear(120,1)

   def forward(self, input):
      model = nn.Sequential(self.fc1,
                            nn.ReLU(),
                            self.fc2)
      output = model(input)
      return output

Однако, после обучения это дает мне только вывод формы [100,70,1],что не является желаемым.

Спасибо!

1 Ответ

5 голосов
/ 04 ноября 2019

nn.Linear действует только на последнюю ось. Если вы хотите применить линейное к последним двум измерениям, вы должны изменить свой входной тензор:

class Network(nn.Module):
   def __init__(self):
      super(Network, self).__init__()
      self.fc1 = nn.Linear(70 * 42, 120)  # notice input shape
      self.fc2 = nn.Linear(120,1)

   def forward(self, input):
      input = input.reshape((-1, 70 * 42))  # added reshape
      model = nn.Sequential(self.fc1,
                            nn.ReLU(),
                            self.fc2)
      output = model(input)
      output = output.reshape((-1, 1, 1))  # OP asked for 3-dim output
      return output
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...