Tensorflow——神经网络实现非线性回归问题

使用Tensorflow构建的神经网络对一元二次函数数据进行训练,通过加噪处理的200个数据点,设计包含10个神经元的隐藏层,应用tanh激活函数,最终拟合出非线性回归曲线。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 根据一元二次函数的数据,使用神经网络进行训练,拟合出一元二次函数曲线

在tensorflow下,使用神经网络实现一元二次方程的非线性回归问题,需要进行简单神经网络的设计,

输入层,我们选取在一定范围内随机生成200个数据,对数据进行加噪处理,

中间层(隐藏层):10个神经元,设置相应的权重、偏置,使用tanh()函数作为激活函数

输出层: 隐藏层的输出进入输出层,经过权重、偏置、最后经过激活函数输出最后输出层的值

 

代码实现:

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
#使用numpy生成200个随机点,linspace()函数可以生成指定范围内的点,最后列表目的是把数据变成二维数据
x_data = np.linspace(-0.5,0.5,200)[:,np.newaxis]
noise = np.random.normal(0,0.02,x_data.shape)
y_data = np.square(x_data) + noise

#定义两个placeholder(占位符),规定是1列
x = tf.placeholder(tf.float32,[None,1])
y = tf.placeholder(tf.float32,[None,1])

#使用神经网络进行训练测试

#定义神经网络的中间层(隐藏层)
#权重
Weights_L1 = tf.Variable(tf.random_normal([1,10]))
#偏置
biases_L1 = tf.Variable(tf.zeros([1,10]))
#传入中间层(隐藏层)的值
Wx_plus_b_L1 = tf.matmul(x, Weights_L1) + biases_L1
#由中间层(隐藏层)输出的值,激活函数使用双曲正切函数
L1 = tf.nn.tanh(Wx_plus_b_L1)

#定义神经网络的输出层
Weights_L2 = tf.
### 使用 TensorFlow.NET 和 Keras 进行非线性回归建模和预测 TensorFlow.NET 是 .NET 平台上的一个开源项目,它允许开发者利用 C# 或其他 .NET 语言来构建基于 TensorFlow 的机器学习模型。尽管 TensorFlow 主要用于 Python 开发环境,但通过 TensorFlow.NET,可以实现类似的建模功能[^3]。 #### 导入必要的库 为了在 .NET 中使用 TensorFlow.NET 和 Keras 构建非线性回归模型,首先需要安装 `SciSharp.TensorFlow.Redist` 和 `TensorFlow.Keras` NuGet 包。以下是导入所需命名空间的代码: ```csharp using Tensorflow; using Tensorflow.Keras.Layers; using static Tensorflow.Binding; ``` #### 准备数据集 对于非线性回归问题,通常会涉及更复杂的关系模式。因此,在准备数据时,可能需要引入多项式特征或其他形式的变换以捕捉这种关系。假设有一个简单的二维输入 \(X\) 和目标变量 \(y\),可以通过以下方式生成合成数据: ```csharp var rng = new Random(0); float[] X_train = Enumerable.Range(0, 100).Select(i => (float)(i / 10f)).ToArray(); float[] y_train = X_train.Select(x => (float)Math.Sin(x) + rng.NextFloat() * 0.2f - 0.1f).ToArray(); // 转换为张量 var X_tensor = tf.constant(X_train, shape: new Shape(100, 1)); var y_tensor = tf.constant(y_train, shape: new Shape(100, 1)); ``` 这里创建了一个带有噪声的正弦波作为训练数据,以便模拟真实世界中的非线性现象。 #### 定义模型结构 由于问题是关于非线性回归,可以选择具有多个隐藏层的神经网络架构。下面是一个简单示例,其中包含两个全连接层以及 ReLU 激活函数: ```csharp var model = keras.Sequential(); model.Add(new Dense(units: 64, activation: "relu", input_shape: new Shape(1))); model.Add(new Dense(units: 64, activation: "relu")); model.Add(new Dense(units: 1)); // 输出层无激活函数适用于回归任务 ``` 此部分定义了一个两层密集网络,每层有 64 个节点,并采用 ReLU 激活函数促进非线性的表达能力[^4]。 #### 编译与拟合模型 完成模型搭建之后,下一步就是编译该模型并指定损失函数、优化器以及其他指标选项。针对回归类别的问题,均方误差(MSE)通常是首选的目标函数之一: ```csharp model.compile(optimizer: "adam", loss: "mean_squared_error"); model.fit(X_tensor, y_tensor, epochs: 500, batch_size: 8); ``` 此处选择了 Adam 优化算法因其自适应特性而被广泛应用于各种类型的深度学习场景之中;同时设置批量大小为 8 来平衡计算效率与收敛速度之间的权衡[^5]。 #### 测试与评估模型表现 最后一步是对测试样本执行推理操作,并比较实际值同预测结果间的差异程度。如果之前划分出了独立验证集合,则可以直接调用 evaluate 方法获取整体评分情况: ```csharp float[] X_test = Enumerable.Range(-10, 200).Select(i => (float)(i / 10f)).ToArray(); var X_test_tensor = tf.constant(X_test, shape: new Shape(200, 1)); var predictions = model.predict(X_test_tensor); foreach(var p in predictions.numpy().ToList<float>()) { Console.WriteLine(p.ToString()); } ``` 以上脚本展示了如何运用 TensorFlow.NET 及其内置模块 Keras 实现基本流程——从加载资料到最终部署解决方案全过程概述完毕[^6]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值