Как рассчитать прямой проход с матричными операциями в PyTorch? - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть входные данные x, матрица веса слоя 1 и матрица веса слоя 2.

Теперь я хочу вычислить выход этой предварительно обученной нейронной сети вручную:

x * weights1 * weights2

При этом я получаю RuntimeError: размер тензора a (6) должен соответствовать размеру тензора b (4) в не-синглтонном измерении 1

class Net(nn.Module):

def __init__(self):
    super().__init__()
    self.fc1 = nn.Linear(4,6)
    self.fc2 = nn.Linear(6,2)
    self.fc3 = nn.Linear(2,1)

def forward(self, x):
    x = F.relu(self.fc1(x))
    x = F.relu(self.fc2(x))
    x = F.relu(self.fc3(x))
    return x

net = Net()
X = torch.randn(1000,4)
net.fc2.weight*(net.fc1.weight * X[0])

1 Ответ

2 голосов
/ 18 февраля 2020

Вы путаете поэлементное умножение (оператор *) с умножением матрицы (оператор @).
Попробуйте:

net.fc2.weight @ (net.fc1.weight @ X[0])
...