|
--- |
|
license: apache-2.0 |
|
library_name: pytorch |
|
--- |
|
|
|
# xor |
|
|
|
A multi-layer perceptron (MLP) that performs the XOR logical computation. It generates the following truth table: |
|
|
|
| A | B | C | |
|
| - | - | - | |
|
| 0 | 0 | 0 | |
|
| 0 | 1 | 1 | |
|
| 1 | 0 | 1 | |
|
| 1 | 1 | 0 | |
|
|
|
It takes as input two column vectors of zeros and ones. It outputs a single column vector of zeros and ones. |
|
|
|
Code: https://github.com/sambitmukherjee/handson-ml3-pytorch/blob/main/chapter10/xor.ipynb |
|
|
|
## Usage |
|
|
|
``` |
|
import torch |
|
import torch.nn as nn |
|
from huggingface_hub import PyTorchModelHubMixin |
|
|
|
# Let's create two column vectors containing `0`s and `1`s. |
|
batch = {'a': torch.tensor([[0.], [0.], [1.], [1.]]), 'b': torch.tensor([[0.], [1.], [0.], [1.]])} |
|
|
|
class XOR(nn.Module, PyTorchModelHubMixin): |
|
def __init__(self): |
|
super().__init__() |
|
self.layer0_weight = torch.tensor([[1., 1.], [1., 1.]]) |
|
self.layer0_bias = torch.tensor([-1.5, -0.5]) |
|
self.layer1_weight = torch.tensor([[-1.], [1.]]) |
|
self.layer1_bias = torch.tensor([-0.5]) |
|
|
|
def heaviside(self, x): |
|
return (x >= 0).float() |
|
|
|
def forward(self, x): |
|
inputs = torch.cat([x['a'], x['b']], dim=1) |
|
out = self.heaviside(inputs @ self.layer0_weight + self.layer0_bias) |
|
out = self.heaviside(out @ self.layer1_weight + self.layer1_bias) |
|
return out |
|
|
|
# Instantiate: |
|
logical_xor = XOR.from_pretrained("sadhaklal/xor") |
|
|
|
# Forward pass: |
|
output = logical_xor(batch) |
|
print(output) |
|
``` |
|
|