tensorflow有关于曲线拟合的demo:https://github.com/tensorflow/tfjs-examples/tree/master/polynomial-regression-core。
将代码下载下来可以看到有几个主要的文件:data.js、index.js、ui.js。
分别讲述一下三个文件的作用:
①.data.js:负责创建训练数据集合
这个函数构建了一个 y = ax^3 + bx^2 + cx + d的多项式,并在这个多项式的基础上增加噪声 add(tf.randomNormal([numPoints], 0, sigma)) 生成散点图
②index.js:根据数据集合训练模型
首先创建a、b、c、d,用随机数初始化,下面将输入数据集将它们训练直至拟合模型
定义训练的次数、学习速率(学习速率约高花费的时间越长,效果越好)、优化器(使用梯度下降法,一种快速收敛的算法)
定义预测函数,因为已经事先知道生成数据使用的函数公式,因此预测函数也使用这个公式
定义损失函数:用来判断每次预测结果的优劣程度,使用均方差
训练函数:按照定义的训练次数来迭代训练,重复预测->判断损失->再次预测的过程
训练代码:建立数据->训练->控制台打印预测结果
或者如官网demo所示,在网页上渲染为折线图
训练前:
训练后:
难道这就结束了吗?不,这只是第一阶段,我们已经通过官网demo学习了曲线拟合的基本步骤:建立数据集合、预测模型、损失函数、优化器、训练逻辑。
接下来,我们进入第二阶段,也是今天要分享的重点,拟合任意曲线。
使用tensorflow.js的高阶API,
①使用张量模型:
②建立神经网络,高阶API非常方便的地方在于将输入层、隐藏层、输出层封装了内部的实现细节,只需要调用函数即可使用完整功能:
③建立数据->训练->控制台打印预测结果
代码非常简短,实际上隐藏了大量的细节。如果不使用高阶API的话,会是这样的代码:
拟合结果:
完整代码: