前端人工智能:通过机器学习推导函数方程式--铂金Ⅲ(2)
上面这四行代码,tf.scalar就是创建了一个零维度的张量,tf.variable就是将我们的张量转化并初始化成一个变量variable,如果通俗的用我们平时编写javascript去理解,上面四行代码就相当于:
当我们给a、b、c、d这四个参数值赋上了初始随机值以后,a=0.513, b=0.261, c=0.259, d=0.504,我们将这些参数放入方程式后得到的曲线图如下: 我们可以看到,根据随机生成的a、b、c、d这四个参数并入到多项式后生成的数据跟真正的数据模拟的曲线差别很大,这就是我们接下来要做的,通过机器学习和训练,不断的调整a、b、c、d这四个参数来将这根曲线尽可能的无限接近实际的数据曲线。 创建优化器(Create an optimizer)
learningRate这个变量是定义学习率,在进行每一次机器训练的时候,会根据学习率的大小去进行计算的偏移量调整幅度,学习率越低,最后预测到的值就会越精准,但是响应的会增加程序的运行时间和计算量。高学习率会加快学习过程,但是由于偏移量幅度太大,容易造成在正确值的周边上下摆动导致运算出的结果没有那么准确。 tf.train.sgd是我们选用了tensorflow.js里帮我们封装好的SGD优化器,即随机梯度下降法。在机器学习算法的时候,通常采用梯度下降法来对我们的算法进行机器训练,梯度下降法常用有三种形式BGD、SGD以及MBGD。 我们使用的是SGD这个批梯度下降法,因为每当梯度下降而要更新一个训练参数的时候,机器训练的速度会随着样本的数量增加而变得非常缓慢。随机梯度下降正是为了解决这个办法而提出的。假设一般线性回归函数的函数为: SGD它是利用每个样本的损失函数对θ求偏导得到对应的梯度,来更新θ: 随机梯度下降是通过每个样本来迭代更新一次,对比上面的批量梯度下降,迭代一次需要用到所有训练样本,SGD迭代的次数较多,在解空间的搜索过程看起来很盲目。但是大体上是往着最优值方向移动。随机梯度下降收敛图如下: 预期函数模型(training process functions) 编写预期函数模型,其实就是用一些列的operations操作去描述我们的函数模型
a.mul(x.pow(tf.scalar(3, 'int32')))就是描述了ax^3(a乘以x的三次方),b.mul(x.square()))描述了b x ^ 2(b乘以x的平方),c.mul(x)这些同理。注意,在predict函数return的时候,用tf.tidy包了起来,这是为了方便内存管理和优化机器训练过程的内存。 定义损失函数(loss) 接下来我们要定义一个损失函数,使用的是MSE(均方误差,mean squared error)。数理统计中均方误差是指参数估计值与参数真值之差平方的期望值,记为MSE。MSE是衡量“平均误差”的一种较方便的方法,MSE可以评价数据的变化程度,MSE的值越小,说明预测模型描述实验数据具有更好的精确度。MSE的计算非常简单,就是先根据给定的x得到实际的y值与预测得到的y值之差 的平方,然后在对这些差的平方求平均数即可。 (编辑:ASP站长网) |