python正弦函数拟合_使用 pytorch 创建神经网络拟合sin函数的实现
时间: 2023-10-10 15:11:40 浏览: 186
好的,关于您的问题,这是一个使用 PyTorch 创建神经网络拟合 sin 函数的实现示例:
```
import torch
import torch.nn as nn
import numpy as np
import matplotlib.pyplot as plt
# 生成数据
x = np.linspace(-np.pi, np.pi, 2000)
y = np.sin(x)
# 将数据转换为张量
x_tensor = torch.tensor(x, dtype=torch.float).unsqueeze(dim=1)
y_tensor = torch.tensor(y, dtype=torch.float).unsqueeze(dim=1)
# 定义神经网络模型
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.hidden_layer = nn.Linear(1, 10)
self.output_layer = nn.Linear(10, 1)
def forward(self, x):
x = self.hidden_layer(x)
x = torch.tanh(x)
x = self.output_layer(x)
return x
# 定义损失函数和优化器
net = Net()
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(net.parameters(), lr=0.2)
# 训练模型
for epoch in range(2000):
y_pred = net(x_tensor)
loss = criterion(y_pred, y_tensor)
optimizer.zero_grad()
loss.backward()
optimizer.step()
if epoch % 100 == 0:
print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, 2000, loss.item()))
# 绘制拟合曲线
y_pred = net(x_tensor).detach().numpy()
plt.plot(x, y, label='ground truth')
plt.plot(x, y_pred, label='prediction')
plt.legend()
plt.show()
```
运行代码后会输出每 100 次迭代后的损失值,最后会绘制出拟合的 sin 函数曲线。您可以根据需要进行修改和调整,例如改变网络结构、调整学习率等。
阅读全文