构作一个神经网络,用于计算含有两个输入的XOR函数。指定所用神经网络单元的种类。要求编写python代码,代码量尽量多一点
时间: 2024-05-03 12:22:31 浏览: 145
神经网络解决抑或(XOR)问题(python代码)
以下是一个使用PyTorch构建的神经网络,用于计算XOR函数:
```python
import torch
import torch.nn as nn
class XORNet(nn.Module):
def __init__(self):
super(XORNet, self).__init__()
self.fc1 = nn.Linear(2, 2)
self.fc2 = nn.Linear(2, 1)
self.sigmoid = nn.Sigmoid()
def forward(self, x):
x = self.fc1(x)
x = self.sigmoid(x)
x = self.fc2(x)
x = self.sigmoid(x)
return x
net = XORNet()
# Define loss and optimizer
criterion = nn.BCELoss()
optimizer = torch.optim.SGD(net.parameters(), lr=0.1)
# Define training data
inputs = torch.tensor([[0, 0], [0, 1], [1, 0], [1, 1]], dtype=torch.float32)
labels = torch.tensor([[0], [1], [1], [0]], dtype=torch.float32)
# Train the network
for epoch in range(10000):
optimizer.zero_grad()
outputs = net(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
if epoch % 1000 == 0:
print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, 10000, loss.item()))
# Test the network
with torch.no_grad():
test_inputs = torch.tensor([[0, 0], [0, 1], [1, 0], [1, 1]], dtype=torch.float32)
test_outputs = net(test_inputs)
for i in range(len(test_inputs)):
print('{} XOR {} = {:.4f}'.format(int(test_inputs[i][0]), int(test_inputs[i][1]), test_outputs[i][0]))
```
该神经网络包含两个输入单元,两个隐藏单元和一个输出单元。激活函数使用sigmoid函数,损失函数使用二进制交叉熵损失函数,优化器使用随机梯度下降。训练数据包括四个输入和四个相应的标签,分别代表XOR函数的四个可能输入组合。在训练过程中,网络将被反复训练10000次,每1000次打印一次损失函数。最后,使用训练完的网络测试四个可能的输入,并打印出计算结果。
阅读全文