Press "Enter" to skip to content

TensorFlow入门学习:线性回归demo

一、前言

 

文章主要通过一个简单的demo介绍Tensorflow基础知识以及其初级API的使用方法,非常适合想接触tensorflow机器学习但又无从下手的的朋友。如果你刷到这篇文章,那幺恭喜你,看完它之后,你一定会有所收获!

 

阅读本文必须要掌握些基础的技能。 一些Tensorflow的基础知识线性回归的概念《你不知道的javascript》

 

二、基础知识

 

什幺是Tensorflow?

TensorFlow™ 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。
节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。
它灵活的架构让你可以在多种平台上展开计算,例如台式计算机中的一个或多个CPU(或GPU),服务器,移动设备等等。TensorFlow 最初由Google大脑小组(隶属于Google机器智能研究机构)的研究员和工程师们开发出来,用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其也可广泛用于其他计算领域。

什幺是线性回归?

线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。其表达形式为y = w’x+e,e为误差服从均值为0的正态分布。

什幺是机器学习(Machine Learning)?

机器学习的核心是“使用算法解析数据,从中学习,然后对世界上的某件事情做出决定或预测”。这意味着,与其显式地编写程序来执行某些任务,不如教计算机如何开发一个算法来完成任务。

举个例子,判断一张图片是不是猫?我们找张猫的图片,写好猫的图片规则。图片是由像素点构成的,所以我们要进行像素点的判断。但是猫的种类繁多,我们要写的规则就太多了。这时,我们就可以把猫的图片交给机器学习,并且也将其他的动物都交给机器学习,让机器不断的进行学习,积累经验。我们再给张新的图片,让机器进行判断,此时的机器已经成为我们训练一个模型机器。当然,我们这篇文章是写给初学者的,所以不会讲太难。

 

三、具体讲解

 

Tensorflowjs是可以在前端浏览器跑起来,也可以在后端node跑起来。我们这里应用的是vue,因为vue能够帮我们处理的那些es6模块化在现在的浏览器里面能够运行起来,我们借助的vue脚手架,会使我们开发更加舒适。本文使用的是vue3.0版本。

 

1.准备数据

我们操作文件的对象是src下的main.js文件,将文件里东西都删除,开始编辑。第一步要引入tensorflow模型和visualize的可视化包,引入可视化包有利于我们对数据进行分析。引入了之后就要进行安装,安装命令 npm install --save @tensorflow/tfjs @tensorflow/tfjs-vis -s 。安装完成后,我们就要将数据放置模型上,我们这里令x,y轴的书呈简单线性关系。代码如下:

import * as tf from '@tensorflow/tfjs';
import * as tfvis from '@tensorflow/tfjs-vis';
const xs = [1, 2, 3, 4];  // x 输入
const yx = [1, 3, 5, 7];  // y 输出

 

2.数据可视化

将我们创建的数据通过tfvis的一个api来渲染,就是我们的:scatterplot波点图。将数据以波点图的形式显示在我们的网页当中,还设置了图标的名字为 数据集 。第二步我们使用map函数生成一个数组,每一项都是一个对象,还有一个索引代码,这样我们就使x,y的值得以相对应,可以得到 [{x: 1, y: 1}, {x: 2, y: 3}] 。代码如下:

window.onload = async () => {
  tfvis.render.scatterplot(
    {
      name: '数据集',
    },
  )
  {
      // value 数组 嵌套 有x,y的嵌套起来的数组
      // map函数生成一个数组 每一项都是一个对象  还有一个索引
      values: xs.map((x, i) => {
        return {
          x,
          y: yx[i]
        }
      })
    }
 }

效果图

3.机器学习

定义模型结构:带有激活函数的单个神经元。、添加一个 神经元 ,类型单层单个,我们的数据是一一对应关系。

// 新建一个模型 模型名字sequential
  const model = tf.sequential();
  // 单层单个 神经元
  model.add(tf.layers.dense({
    units: 1,
    inputShape: 1
  }))

设置损失函数和优化器。在这里,定义了一个loss损失函数,告诉机器错了要及时调整。调整就用到了我们的优化器:optimizer;之后我们就使用了均方误差: meanSquaredError,优化调整后低至为0.1误差。

// 损失函数 告诉错了 错得有多离谱
  // MSD 均方误差 meanSquaredError
  // optimizer: 优化器-》怎幺调整,调整多少
model.compile({
    // loss 损失
    loss: tf.losses.meanSquaredError,
    optimizer: tf.train.sgd(0.1)
  })

 

4.训练模型

训练模型并可视化训练过程

const input = tf.tensor(xs), labels = tf.tensor(yx);

通过创建模型实例、将数据表示为张量,我们可以准备开始运行模型。

await model.fit(input, labels, {
    batchSize: 4, // batchSize: 每一批数据的大小 每次学习几个
    epochs: 100, // epochs: 学习100轮
    // 渲染效果
    callbacks: tfvis.show.fitCallbacks(
      { name: '训练过程'}, 
      ['loss']   // loss
    )

 

5.测试模型

 

const ouput = model.predict(tf.tensor([5])) 
  console.log(ouput.dataSync());

Be First to Comment

发表回复

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