[TensorFlowJS只如初见]实战三·使用TensorFlowJS拟合曲线

[TensorFlowJS只如初见]实战三·使用TensorFlowJS拟合曲线问题描述拟合y=x*x-2x+3+0.1(-1到1的随机值)曲线给定x范围(0,3)问题分析在直线拟合博客中,我们使用最简单的y=wx+b的模型成功拟合了一条直线,现在我们在进一步进行曲线的拟合。简单的y=wx+b模型已经无法满足我们的需求,需要利用更多的神经元来解决问题了。代码<html><head><script…

大家好,又见面了,我是你们的朋友全栈君。

[TensorFlowJS只如初见]实战三·使用TensorFlowJS拟合曲线

  • 问题描述
    拟合y= x*x -2x +3 + 0.1(-1到1的随机值) 曲线
    给定x范围(0,3)

  • 问题分析
    直线拟合博客中,我们使用最简单的y=wx+b的模型成功拟合了一条直线,现在我们在进一步进行曲线的拟合。简单的y=wx+b模型已经无法满足我们的需求,需要利用更多的神经元来解决问题了。

  • 代码

<html>

<head>
  <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs"> </script>

</head>

<body>
  <button class="btn btn-primary" onclick="fnRun0();">开始0</button>
  <div id="p0Id">out0</div>
  <button class="btn btn-primary" onclick="fnRun1();">开始1</button>
  <div id="p1Id">out1</div>
  <button class="btn btn-primary" onclick="fnRun2();">开始2</button>
  <div id="p2Id">out2</div>
</body>

<script> function get_ys(xs) { 
     var ys = new Array(); for (var i = 0; i < xs.length; i++) { 
     ys[i] = xs[i] * xs[i] - 2 * xs[i] + 3 + (0.001 * (2 * Math.random() - 1)); } return (ys); } var xs = new Array(); for (var i = 0; i < 200; i++) { 
     xs[i] = 0.01 * i; } var ys = get_ys(xs); const xst = tf.tensor(xs, [xs.length, 1]); const yst = tf.tensor(ys, [ys.length, 1]); const a = tf.variable(tf.scalar(Math.random())); const b = tf.variable(tf.scalar(Math.random())); const c = tf.variable(tf.scalar(Math.random())); function predict(x) { 
     return tf.tidy(() => { 
     return a.mul(x.square()) .add(b.mul(x)) .add(c); }); } function loss(prediction, labels) { 
     const error = prediction.sub(labels).square().mean(); return error; } const numIterations = 1000; const learningRate = 0.12; const optimizer = tf.train.sgd(learningRate); function train(xst, yst, numIterations) { 
     for (var iter = 0; iter < numIterations+1; iter++) { 
     optimizer.minimize(() => { 
     const predsYs = predict(xst); if(iter%100==0){ 
     console.log(iter+" steps loss is "+loss(predsYs, yst)); } return loss(predsYs, yst); }); } const test_xs = tf.tensor([0.5,1,1.5],[3,1]); predict(test_xs).print(); } train(xst,yst,numIterations); </script>

</html>
  • 输出结果
    进行1000轮训练以后,我们输入[0.5,1,1.5]进行预测,得到结果为
    [[2.2503195],
    [2.0105994],
    [2.2543631]]
    较好地拟合了曲线。

log

"0 steps loss is Tensor
    1.7456094026565552"
"100 steps loss is Tensor
    0.08455191552639008"
"200 steps loss is Tensor
    0.040247201919555664"
"300 steps loss is Tensor
    0.0191580131649971"
"400 steps loss is Tensor
    0.009119458496570587"
"500 steps loss is Tensor
    0.004341088235378265"
"600 steps loss is Tensor
    0.0020665652118623257"
"700 steps loss is Tensor
    0.0009838765254244208"
"800 steps loss is Tensor
    0.0004685141902882606"
"900 steps loss is Tensor
    0.00022319876006804407"
"1000 steps loss is Tensor
    0.00010642936103977263"
"Tensor
    [[2.2503195],
     [2.0105994],
     [2.2543631]]"
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160488.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm使用小技巧_pycharm学笨办法

    pycharm使用小技巧_pycharm学笨办法一、常用小技巧1.设置代码字体点击左上角的“File”(文件),选择“Settings”(设置),输入“font”(字体)找到“Font”,在“Size”(大小)里面设置数字,默认是13,建议15或者18就可以了。2.设置菜单界面文字大小这里跟上面有些区别,上面是调整代码文字大小,但并没有改变菜单界面的文字大小,如果你的菜单界面文字比较小。那么你就需要去调整一下菜单界面的文字大小了,点击左上角的“File”,选择“Settings”,输入“font”,找到“Appearance”,在“Use

    2022年8月26日
    3
  • java算法是什么_什么是java算法

    java算法是什么_什么是java算法什么是java算法算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,java算法就是采用Java语言来实现解决某一问题的清晰指令。算法的特征:输入性:有零个或多个外部量作为算法的输入输出性:算法产生至少一个量作为输出确定性:算法中每条指令清晰,无歧义有穷性:算法中每条指令的执行次数有限,执行每条指令是时间也有限可行性:算法原则上能够精确的运行,而且人们用纸和笔做有限次运算后即可完成程…

    2022年7月9日
    21
  • 正确部署metrics-server (0.3.6,3.7 )及问题处事(kubernetes1.9.3)

    正确部署metrics-server (0.3.6,3.7 )及问题处事(kubernetes1.9.3)

    2021年5月14日
    181
  • linux直接运行py文件_linux的系统调用

    linux直接运行py文件_linux的系统调用python下编译py成pyc和pyo(文件加密)需要注意的是,编译成pyc或者pyo文件后需要将命名改成与源Python命名一致,将其放在源目录下,虽然其他python文件调用pyd时显示不能检测到该模块,但实际上可以运行。由于pyc的编译收到python版本的影响,所以当将编译后的pyc迁移到另一台电脑中时,最好保持python环境一致。将python文件.py编译成pyc二进制文件:pyt…

    2022年10月24日
    0
  • NGUI研究之制作转圈的技能CD特效

    NGUI研究之制作转圈的技能CD特效

    2021年12月2日
    39
  • linux安装redis 完整步骤

    linux安装redis 完整步骤最近在linux服务器上需要安装redis,来存放数据,增加用户访问数据的速度,由于是第一次安装,于是在百度上搜了一篇文章,按照这篇博客,顺利安装好了,因此将博主的文章拷过来记录一下,方便以后使用,也为需要的朋友提供一个方便,参考博文地址:https://www.cnblogs.com/lauhp/p/8487029.html安装:1.获取redis资源  wgethttp://download…

    2022年6月28日
    29

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号