#python #machine-learning #neural-network #pytorch
Вопрос:
Я пытаюсь использовать MLP для решения проблемы XOR с pytorch.
from torch import nn class XORLinear(nn.Module): def __init__(self): super(XORLinear, self).__init__() self.fc1 = nn.Linear(2, 2) self.activation = nn.ReLU() self.fc2 = nn.Linear(2, 1) self.init_weights() def init_weights(self): self.fc1.weight.data = torch.Tensor([[1, 1], [1, 1]]) self.fc1.bias.data = torch.Tensor([[0, -1]]) self.fc2.weight.data = torch.Tensor([[1, -2]]) self.fc2.bias.data.zero_() def forward(self, data): fc1 = self.fc1(data) activated = self.activation(fc1) fc2 = self.fc2(fc1) return fc2
Я думал, что с начальными весами модель должна выдавать правильные прогнозы для всех 4 возможных входных данных.
device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model = XORLinear().to(device) x = torch.Tensor([[1, 1], [0, 0], [1, 0], [0, 1]]) y_pred = model(x) print(y_pred)
Однако прогнозы таковы
tensor([[0.], [2.], [1.], [1.]], grad_fn=lt;AddmmBackwardgt;)
Почему результат такой?
Комментарии:
1. Что вы имеете в виду » с начальными весами «? Вы тренируете свою модель или нет?
2. @desertnaut Поскольку я не знаком с pytorch, я хочу начать с одного известного решения, чтобы проверить, правильно ли я определяю модель, например, синтаксис. Я рассчитываю решение вручную и думаю, что оно должно быть правильным. Однако я не знаю, почему вывод равен 2 для [0, 0]. Что не так с моим кодом?
3. Результаты верны для всех входных данных, кроме (0,0), и я нахожу тот же результат (2), что и ваша сеть, при выполнении вычисления с помощью ручки и бумаги. Должно быть, вы ошиблись в своих расчетах с каким-то параметром. Я бы сказал,что ваш fc2.вес должен быть (1, -1) вместо (1,-2)