帮我用torch.nn实现一个简单的前馈神经网络
时间: 2023-11-06 09:04:31 浏览: 175
以下是使用torch.nn实现一个简单前馈神经网络的示例代码:
```python
import torch
import torch.nn as nn
# 定义前馈神经网络模型
class FeedForwardNet(nn.Module):
def __init__(self, input_size, hidden_size, output_size):
super(FeedForwardNet, self).__init__()
self.fc1 = nn.Linear(input_size, hidden_size)
self.relu = nn.ReLU()
self.fc2 = nn.Linear(hidden_size, output_size)
def forward(self, x):
out = self.fc1(x)
out = self.relu(out)
out = self.fc2(out)
return out
# 定义训练数据和标签
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 = FeedForwardNet(2, 4, 1)
criterion = nn.MSELoss()
# 定义优化器
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
# 训练模型
num_epochs = 1000
for epoch in range(num_epochs):
# 前向传播
y_pred = model(x_train)
loss = criterion(y_pred, y_train)
# 反向传播和优化
optimizer.zero_grad()
loss.backward()
optimizer.step()
# 每100次迭代打印一次损失
if (epoch+1) % 100 == 0:
print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item()))
# 测试模型
with torch.no_grad():
y_pred = model(x_train)
y_pred_cls = torch.round(y_pred)
acc = (y_pred_cls == y_train).sum().item() / y_train.size(0)
print('Accuracy: {:.2f}%'.format(acc*100))
```
在这个示例中,我们定义了一个包含2个输入、4个隐藏单元和1个输出的前馈神经网络模型。我们使用MSE损失函数和随机梯度下降优化器来训练模型。在训练过程中,我们将模型在训练数据上进行了1000次迭代,每100次迭代打印一次损失。最后,我们使用训练好的模型在训练数据上进行了预测,并计算了模型的准确率。
阅读全文