多层感知器实现异或的pytorch代码
时间: 2023-08-29 14:07:41 浏览: 118
以下是多层感知器实现异或的PyTorch代码:
```python
import torch
import torch.nn as nn
# 定义多层感知器模型
class MLP(nn.Module):
def __init__(self):
super(MLP, self).__init__()
self.layer1 = nn.Linear(2, 4) # 输入层到隐藏层
self.layer2 = nn.Linear(4, 1) # 隐藏层到输出层
self.activation = nn.Sigmoid() # 激活函数为Sigmoid
def forward(self, x):
x = self.layer1(x)
x = self.activation(x)
x = self.layer2(x)
x = self.activation(x)
return x
# 定义训练数据
x_train = torch.tensor([[0, 0], [0, 1], [1, 0], [1, 1]], dtype=torch.float32)
y_train = torch.tensor([[0], [1], [1], [0]], dtype=torch.float32)
# 初始化模型和优化器
model = MLP()
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)
# 开始训练
epochs = 10000
for epoch in range(epochs):
# 前向传播
y_pred = model(x_train)
# 计算损失
loss = nn.functional.binary_cross_entropy(y_pred, y_train)
# 反向传播
optimizer.zero_grad()
loss.backward()
optimizer.step()
# 输出训练过程
if (epoch+1) % 1000 == 0:
print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, epochs, loss.item()))
# 测试模型
with torch.no_grad():
y_pred = model(x_train)
y_pred = (y_pred > 0.5).float()
print('Predicted Values:', y_pred)
```
在这个例子中,我们定义了一个包含一个输入层、一个隐藏层和一个输出层的多层感知器。输入是一个2维的张量,输出是一个标量。我们使用Sigmoid作为激活函数,并使用二元交叉熵作为损失函数。我们使用随机梯度下降作为优化器,训练10000个epoch,每1000个epoch输出一次损失值。最后我们对模型进行测试,输出预测的结果。
阅读全文