Реализация Pytorch MLP для решения проблемы XOR дает неправильный прогноз

#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)