[paddle] 非线性拟合问题的训练

利用paddlepaddle建立神经网络,模拟有限个数据的非线性拟合

本文仍然考虑 f ( x ) = sin ⁡ ( x ) x f(x)=\frac{\sin(x)}{x} f(x)=xsin(x) 函数在区间 -10,10 上固定数据的拟合。

python 复制代码
import paddle
import paddle.nn as nn
import numpy as np
import matplotlib.pyplot as plt

# 设置随机种子以确保结果的可重复性
paddle.seed(1)

# 生成数据集
x_data = (np.random.rand(500) * 20 - 10).astype('float32')  # 生成500个随机x值,范围在-10到10之间
y_data = np.sin(x_data) / x_data  # 生成y值
y_data = y_data.reshape(-1, 1)  # 将y_data转换为二维数组

# 定义模型,一个具有2个隐藏层的多层感知器
class MyModel(nn.Layer):
    def __init__(self):
        super(MyModel, self).__init__()
        self.hidden1 = nn.Linear(in_features=1, out_features=50)
        self.bn = nn.BatchNorm1D(num_features=50)
        self.hidden2 = nn.Linear(in_features=50, out_features=1)

    def forward(self, x):
        x = paddle.tanh(self.hidden1(x))
        x = self.bn(x)
        x = self.hidden2(x)
        return x

model = MyModel()

# 定义损失函数
loss_fn = nn.MSELoss()

# 设置优化器
optimizer = paddle.optimizer.Adam(learning_rate=0.01, parameters=model.parameters())

# 训练数据
train_data = paddle.to_tensor(x_data).unsqueeze(-1), paddle.to_tensor(y_data)

# 训练模型
epochs = 1000
for epoch in range(1, epochs + 1):
    loss = loss_fn(model(train_data[0]), train_data[1])
    loss.backward()
    optimizer.step()
    optimizer.clear_grad()
    if epoch % 100 == 0:
        print(f'Epoch {epoch}: Loss = {loss.numpy()}')

# 使用训练好的模型进行预测
y_pred = model(train_data[0]).numpy()

# 可视化结果
plt.scatter(x_data, y_data, label='True')
plt.scatter(x_data, y_pred, label='Predicted')
plt.legend()
plt.show()
相关推荐
OKkankan39 分钟前
LangChain 能力详解!:输出解析、RAG、向量数据库与 Retriever 检索器
数据结构·python·langchain·ai应用
龙腾AI白云1 小时前
孪生不止在工厂:能源、医疗与农业
人工智能·机器学习·scikit-learn·知识图谱
YFJ_mily1 小时前
9.24早鸟通道即将关闭|IMRA2026智能制造机器人自动化IEEE会议|往届EI稳定检索,设有学生专属投稿权益
人工智能·机器学习·机器人·自动化·智能制造·rdlink研发家·马鞍山会议
山哥ol1 小时前
【Geany 环境配置与中文乱码解决参考】
python
renhongxia12 小时前
数字孪生不止在工厂:能源、医疗与农业
人工智能·深度学习·算法·机器学习·数字孪生
会飞锦鲤2 小时前
基于 Mask R-CNN 的药片缺陷检测系统
人工智能·pytorch·python·神经网络·resnet-50
默 语2 小时前
Java新手入门:从零开始安装JDK并配置环境变量
java·开发语言·python·mysql·group by·1024程序员节·数据去重
清水白石0082 小时前
Python 异步编程深度解析:Cancellation 到底是异常还是控制信号?从 asyncio 取消机制到企业级事务设计最佳实践
开发语言·python
Patrick在香港3 小时前
Python 审计香港开放数据目录:两个端点差 10 倍,只有 9.3% 的资源标了「最后修改时间」
开发语言·数据库·python·数据分析·api·数据治理·开放数据
IT毕设梦工厂3 小时前
计算机毕业设计选题推荐:基于大数据的草鱼价格分析与可视化|毕业设计选题|计算机毕设|选题推荐|毕设指导|项目定制|源码|高质量项目
大数据·hadoop·python·数据挖掘·数据分析·课程设计·大数据毕设项目