用pytorch构建三层前馈神经网络,拟合正弦曲线y=sin(2πx)
时间: 2024-09-12 14:03:54 浏览: 50
在PyTorch中构建三层前馈神经网络(Feedforward Neural Network)来拟合正弦函数通常用于简单的数据拟合示例。这里是一个基本步骤的例子:
首先,你需要安装PyTorch库,如果还没有安装可以使用pip进行安装:
```bash
pip install torch torchvision
```
然后,你可以按照以下步骤创建模型:
```python
import torch
import torch.nn as nn
# 定义三层前馈网络
class SineModel(nn.Module):
def __init__(self, input_dim, hidden_dim, output_dim):
super(SineModel, self).__init__()
self.fc1 = nn.Linear(input_dim, hidden_dim)
self.fc2 = nn.Linear(hidden_dim, hidden_dim)
self.fc3 = nn.Linear(hidden_dim, output_dim)
def forward(self, x):
x = torch.sin(self.fc1(x)) # 使用sin激活函数处理输入
x = torch.sin(self.fc2(x))
return self.fc3(x) # 输出层直接连接到结果
# 设定输入维度、隐藏层维度
input_dim = 1
hidden_dim = 16
output_dim = 1 # 因为我们是在拟合y=sin(2πx),所以输出维度为1
model = SineModel(input_dim, hidden_dim, output_dim)
```
接下来,你可以定义损失函数(如均方误差MSE)和优化器(如Adam),并训练模型:
```python
import torch.optim as optim
# 假设我们有训练数据
x_data = torch.linspace(0, 1, 100).view(-1, 1)
y_data = torch.sin(2 * np.pi * x_data)
# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.01)
num_epochs = 500
for epoch in range(num_epochs):
optimizer.zero_grad() # 梯度清零
y_pred = model(x_data) # 前向传播
loss = criterion(y_pred, y_data) # 计算损失
loss.backward() # 反向传播计算梯度
optimizer.step() # 更新权重
print(f"Epoch {epoch + 1}: Loss = {loss.item():.4f}")
```
阅读全文