1.设计一个二次函数,从该函数中采样20个左右的训练数据(可以用随机函数加一些噪声) 2.用matplotlib绘制函数 3.创建一个训练模型,利用上述20个训练样本,用随机梯度下降法训练模型 4.创建一些测试数据,测试训练好的模型。 5.程序用PyTorch实现。
时间: 2024-11-06 19:21:20 浏览: 38
在Python中,我们可以使用NumPy生成随机的二次函数训练数据,并结合Matplotlib绘制。这里是一个使用PyTorch的基础示例:
```python
import numpy as np
import torch
from torch import nn, optim
import matplotlib.pyplot as plt
# 设定随机种子以便于复现结果
torch.manual_seed(42)
# 定义二次函数f(x) = ax^2 + bx + c
def quadratic_function(a=1, b=-2, c=3):
return lambda x: a * x**2 + b * x + c
# 添加噪声到二次函数上
def add_noise(func, std_dev=0.1):
def noisy_func(x):
return func(x) + np.random.normal(0, std_dev, len(x))
return noisy_func
# 生成训练数据
x_train = np.linspace(-10, 10, 20)
y_train = quadratic_function()(x_train) + add_noise(quadratic_function())(x_train)
# 将numpy数组转换为torch张量
x_train_tensor = torch.tensor(x_train, dtype=torch.float32)
y_train_tensor = torch.tensor(y_train, dtype=torch.float32)
# 绘制函数
plt.scatter(x_train, y_train, label='Training Data')
plt.plot(x_train, quadratic_function()(x_train), 'r', label='True Function')
plt.legend()
plt.show()
# 创建简单线性回归模型(假设我们用线性模型拟合二次函数)
class LinearModel(nn.Module):
def __init__(self):
super().__init__()
self.linear = nn.Linear(1, 1)
def forward(self, x):
return self.linear(x)
# 定义损失函数和优化器
model = LinearModel()
criterion = nn.MSELoss() # 使用均方误差作为损失函数
optimizer = optim.SGD(model.parameters(), lr=0.01) # 随机梯度下降优化器
# 训练模型
num_epochs = 100
for epoch in range(num_epochs):
optimizer.zero_grad()
outputs = model(x_train_tensor.unsqueeze(1)) # unsqueeze用于将一维输入扩展到二维
loss = criterion(outputs, y_train_tensor)
loss.backward()
optimizer.step()
if (epoch+1) % 10 == 0:
print(f"Epoch {epoch+1}, Loss: {loss.item():.4f}")
# 测试模型
x_test = np.linspace(-15, 15, 50)
y_pred = model(torch.tensor(x_test, dtype=torch.float32)).detach().numpy()
plt.scatter(x_test, y_pred, color='g', label='Predictions')
plt.legend()
plt.show()
#
阅读全文