TensorFlow.js 入门并动手编写娱乐版的双色球在线预测

2024-01-18 19:59

本文主要是介绍TensorFlow.js 入门并动手编写娱乐版的双色球在线预测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

TensorFlow.js 入门并动手编写娱乐版的双色球在线预测

背景

一年前就知道了 TensorFlow js 版的存在,一直没有去玩一下。最近一次偶然的机会,要协助同事处理过一个 TensorFlow.js 相关的 Demo 小程序,要使用 TensorFlow.js 结合小程序的照相机 API 功能,实现**微信小程序扫描识别物体功能**。该 Demo 主要是由 TensorFlow.js 官方项目 – https://github.com/tensorflow/tfjs-wechat/tree/master/demo/mobilenet 改造而来。后面开始看官方 demo 开始由最简单的 《TensorFlow.js 实现线性回归》 的例子开始学习,并捣鼓出这个《TensorFlow.js 娱乐版的双色球在线预测》。

工具由来

为什么叫《TensorFlow.js 娱乐版的双色球在线预测》?哈哈,因为双色球开的期数总数才 2510+ 期,作为训练模型 model 学习的基础数据也太小了。还有本身电脑的计算能力也有限,如果硬把学习次数 epochs 加非常高,可能电脑要运行几天才可以学习完并预测出结果哈,大家可以试试选用期数为 00000-20000 来作为训练模型 model 然后把学习次数 epochs 加高来进行预测。

费话不多说,直接关键源码分析
$(document).ready(function() {
  runTf('00000-20000', 1, 29999)
  // 默认打开运行预测 训练模型期号数据是 00000-20000,学习次数是 1 次,预测的期号是 29999  $('#btn').click(function` `() { // 点击按钮绑定处理
  const modelVal = $('#model').val()
  const epochsVal = $('#epochs').val()
  const roundVal = $('#round').val()
  const tips = '<span class="tips pulse animated infinite">正在预测...</span>';  if (!modelVal) {
    alert('请先选择历史数据模型训练(model)')
    return false
  }  if (!epochsVal) {
    alert('请先输入学习次数(epochs)')
    return false
  }  if (!roundVal) {
    alert('请先输入待预测的期号')
    return false
  }  $('#micro-out-div').html(tips)
  runTf(modelVal, Number(epochsVal), Number(roundVal))
  })  function runTf(historyModel, epochs, round) { // 关键函数
    $('#table').load(`./ssq/history-${historyModel}.htm`, function` `() {
    // 加载相应的训练模型数据,来源于 500 彩票 http://kaijiang.500.com
    const rawArr = []
    const xsArr = []
    const yxArr = []
    // 通过 dom 操作把源数据由 table 中抽取出来
    $('#table .t_tr1').each(function` `() {
    let This = $(this);
    let str = ''
    This.find('td').each(function` `(n) {
    if` `(n === 0) {
      str += $(this).text()
    } else` `if` `(n < 8 && n > 0) {
      str += '|'` `+ $(this).text()
    }
  })  let arr = str.split('|')
  arr = arr.map((_) => Number(_))  rawArr.push(arr)
  xsArr.push(arr[0])
  yxArr.push(arr.slice(1))})
async function` `run() { // 关键代码
  // Sequential 序贯模型,序贯模型是函数式模型的简略版,为最简单的线性、从头到尾的结构顺序,不分叉,是多个网络层的线性堆叠。
  const model = tf.sequential()
  // 使用.add() 方法将各层添加到模型中
  model.add(tf.layers.dense({ units: 7, inputShape: [1] })) // Dense,支持通过参数 inputShape 指定输入尺寸,units: 该层的神经单元结点数(输出结果是 7 个球)
  // compile({loss, optimizer, metrics}) 编译模型,定义损失函数,优化函数,绩效评估函数
  model.compile({ loss: 'binaryCrossentropy', optimizer: 'sgd'` `}) // metrics 可参考:https://js.tensorflow.org/api/1.7.2/#Metrics
  console.log('开始,gogogo!')
  // 下面其实定义使用 tensor / tensor1d / tensor2d 都没关系,最终 tensor1d / tensor2d ...3d... 都跟 tensor 效果一样,语法糖来的
  const xs = tf.tensor(xsArr) // 定义一个张量(这里是历史期号)
  console.log(xs.shape) // 打印输入尺寸
  const ys = tf.tensor(yxArr) // 定义一个张量(这里是上面 xs 的历史期号对应所有的开奖结果)
  console.log(ys.shape) // 打印输入尺寸
  console.time('训练时间')
  console.log('开始训练...')
  await model.fit(xs, ys, { epochs: epochs }) // 导入数据进行训练 可参考:https://js.tensorflow.org/api/1.7.2/#tf.LayersModel.fit
  console.timeEnd('训练时间')
  console.log('结束训练')
  console.time('预测时间')
  console.log('开始预测...')
  const predicted = model // 为什么叫娱乐版的呢?因为下面出来的结果太失望了,要自己重新处理
  .predict(tf.tensor2d([round], [1, 1])) // 预测自己输入的期号为 round 的结果
  .abs() // 取绝对值
  .floor() // 去掉小数点
  .dataSync() // 得到的是一个 Float32Array,如果学习次数 epochs 太少的话,结果类似 [20661, 28071, 7391, 10978, 7883, 9646, 5441],WTF!太差了吗?
  .map((_, n) => { // 自己按号码规则求余优化成最终结果
    return` `n !== 6 ? _ % 33 || 33 : _ % 16 || 16
  })
  const obj = {} // 判断出来的红球有没有重复
  predicted.forEach((_, n) => {
    if` `(n !== 6) {
      obj[_] = 1
    }
  })
  if` `(Object.keys(obj).length < 6) { // 什么?出来的红球有重复?帮我重新预测吧
    run()
    return` `false
  }
  // 下面是 dom 操作,打印预测结果
  const predictedHtml = [...predicted] .map((_, n) => {    return` `n !== 6 ? `<i>${_}</i>` : `<b>${_}</b>     })
     .join(' | ')
    $('#micro-out-div').html(
     '期号 '` `+ round + ' 预测结果为:'` `+ predictedHtml
    )
    console.timeEnd('预测时间')
    console.log('结束预测')
   }
   run()
  })
 }
})
可能会遇到的问题

Error when checking input: expected dense_Dense1_input to have x dimension(s). but got array with shape y,z 或者 Error when checking input: expected dense_Dense1_input to have 3 dimension(s). but got array with shape 或者 Error when checking target: expected dense_Dense1 to have shape [,1], but got array with shape [6,7] 解决方式:一般是需要相应修改代码 model.add(tf.layers.dense({ units: 7, inputShape: [1] })) 中的 units 与 inputShape 的值就可以了

感慨良多

回忆起 10 几年前自己曾经在图书馆看过一本书名叫《神经网络与卷积学习》还是啥的,隐约回忆起类似下面一个画面。

TensorFlow.js 机器学习

TensorFlow.js 机器学习

还想起了当时书中介绍了“权重”、“权值”等概念。人工智能的概念与实现理论基础几十年前已经有了,受限与计算机的算力,一直没有发展起来,到最近十几年半导体行业与计算机计算能力的快速发展,人工智能才逐渐发展起来。

而自己机缘巧合,进入和开启了前端的职业生涯,在图形图像处理方向的学习,需要作图要用上向量与矩阵计算,需要重新拾起大学、高中、小学的数学知识;还有一段时间沉迷于对一些经典算法的练脑、学习与进步;感觉自己对未来的 AI 世界充满憧憬与期待。

参考引用

https://js.tensorflow.org/api/1.7.2/#Tensors https://github.com/tensorflow/tfjs-examples/tree/master/getting-started https://blog.csdn.net/qq_38806886/article/details/83892671 https://www.cnblogs.com/wj-1314/p/9579490.html

本文作者:Nelson Kuang,欢迎大家留言及多多指教

版权声明:欢迎转载学习 => 请标注信息来源于http://www.a4z.cn/fe/2020/05/29/tensorflow-js/


http://www.taodudu.cc/news/show-8428587.html

相关文章:

  • 第一卷清晨的帝国 第一百五十章 登山
  • 内卷的反义词是学习:学习的三个作用与方向
  • FastAPI 教程、结合vue实现前后端分离、nicegui
  • 【庄碰辉】平平淡淡才是真
  • 高能天气——团队作业第一周
  • 有一种自在平平淡淡
  • 我是一个现实的理想主义者
  • 被颠倒的现实主义与理想主义(番外篇)
  • 我是一个现实主义者
  • 做一个现实主义者
  • 目标检测学习笔记12——Yolo系列梳理学习
  • (Lidar SLAM 论文)LOAM: Lidar Odometry and Mapping in Real-time
  • 瀑布式图片排列
  • Js的图片瀑布流
  • 实现瀑布流加载图片
  • 基于react的瀑布流组件
  • 瀑布流图片布局
  • jQuery图片瀑布流
  • 纯php实现图片瀑布流渲染
  • 无聊加瞌睡中来这
  • 骗子太多?还是傻子不够用?玩的开心,散分
  • 搞笑QQ资料
  • 70、80、90后的离奇区别
  • 《Unity 游戏案例开发大全》一第6章 益智休闲类游戏——可乐可乐
  • 千头万绪
  • Netty源码分析系列之三:Netty启动之NioEventLoop创建
  • 千头万绪何处理 事事忧尽事事休{转载}
  • Blog开发笔记-千头万绪,不知从何说起...
  • 项目管理千头万绪 5个管理重点需要重视
  • IT系统千头万绪 你该从何理起?
  • 这篇关于TensorFlow.js 入门并动手编写娱乐版的双色球在线预测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



    http://www.chinasem.cn/article/620099

    相关文章

    Spring Security 从入门到进阶系列教程

    Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

    JS常用组件收集

    收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

    水位雨量在线监测系统概述及应用介绍

    在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

    电力系统中的A类在线监测装置—APView400

    随着电力系统的日益复杂和人们对电能质量要求的提高,电能质量在线监测装置在电力系统中得到广泛应用。目前,市场上的在线监测装置主要分为A类和B类两种类型,A类和B类在线监测装置主要区别在于应用场景、技术参数、通讯协议和扩展性。选择时应根据实际需求和应用场景综合考虑,并定期维护和校准。电能质量在线监测装置是用于实时监测电力系统中的电能质量参数的设备。 APView400电能质量A类在线监测装置以其多核

    在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

    1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

    数论入门整理(updating)

    一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

    Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

    概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

    【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

    【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

    poj 2104 and hdu 2665 划分树模板入门题

    题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

    MySQL-CRUD入门1

    文章目录 认识配置文件client节点mysql节点mysqld节点 数据的添加(Create)添加一行数据添加多行数据两种添加数据的效率对比 数据的查询(Retrieve)全列查询指定列查询查询中带有表达式关于字面量关于as重命名 临时表引入distinct去重order by 排序关于NULL 认识配置文件 在我们的MySQL服务安装好了之后, 会有一个配置文件, 也就