pytorch构建三层神经网络拟合正弦函数曲线
时间: 2024-09-10 13:26:11 浏览: 101
使用 pytorch 创建神经网络拟合sin函数的实现
在PyTorch中构建三层神经网络以拟合正弦函数通常涉及以下几个步骤:
1. **导入所需库**:
```python
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset
```
2. **定义神经网络模型**:
这是一个简单的三层全连接神经网络(也称为前馈神经网络),包括输入层、隐藏层和输出层。
```python
class SineModel(nn.Module):
def __init__(self, input_size, hidden_size, output_size):
super(SineModel, self).__init__()
self.fc1 = nn.Linear(input_size, hidden_size)
self.relu = nn.ReLU()
self.fc2 = nn.Linear(hidden_size, hidden_size)
self.fc3 = nn.Linear(hidden_size, output_size)
def forward(self, x):
out = self.fc1(x)
out = self.relu(out)
out = self.fc2(out)
out = self.relu(out)
out = self.fc3(out)
return out
```
这里假设输入大小`input_size`为1(因为正弦函数只有一个输入值),隐藏层大小为`hidden_size`,输出层大小也为1。
3. **数据准备**:
创建一些随机输入x和对应的正弦函数值y作为训练样本,并将其转换为PyTorch张量。
```python
input_size = 1
hidden_size = 24
output_size = 1
# 创建随机输入和期望输出
x_data = torch.linspace(-3 * np.pi, 3 * np.pi, 1000).reshape(-1, 1)
y_data = torch.sin(x_data)
# 数据集和数据加载器
data = TensorDataset(x_data, y_data)
train_loader = DataLoader(data, batch_size=64, shuffle=True)
```
4. **初始化并配置模型、损失函数和优化器**:
```python
model = SineModel(input_size, hidden_size, output_size)
criterion = nn.MSELoss() # 使用均方误差作为损失函数
optimizer = optim.Adam(model.parameters(), lr=0.001)
```
5. **训练模型**:
通过遍历训练数据,更新模型参数以最小化损失。
```python
num_epochs = 1000
for epoch in range(num_epochs):
for inputs, targets in train_loader:
optimizer.zero_grad()
outputs = model(inputs)
loss = criterion(outputs, targets)
loss.backward()
optimizer.step()
if (epoch + 1) % 100 == 0:
print(f"Epoch {epoch+1}/{num_epochs}, Loss: {loss.item():.4f}")
```
阅读全文