培训和收敛性
大多数人工智能和机器学习的重要组成部分是循环的,即系统在许多迭代改进的训练。一个非常简单的方法来训练以这种方式只是在for循环执行更新。我们看到一个这样的例子在第二课:
我们可以改变这个工作流而不是使用一个变量作为收敛循环,如以下:
这里的主要变化是,现在是一个循环而
循环,继续循环测试(使用tf.less
less-than-test)是正确的。在这里,我们测试x
小于给定的阈值(存储在一个常数),如果是这样,我们继续循环。
梯度下降法
任何机器学习库必须有一个梯度下降算法。我认为这是一个法律。无论如何,Tensorflow有几个不同的主题,他们是有相当的直接使用。
梯度下降学习算法,试图减少一些错误。你问什么错误?这是我们,尽管有一些常用的方法。
让我们先从一个基本的例子:
这是主要的兴趣train_op = tf.train.GradientDescentOptimizer (0.01) .minimize(错误)
培训步骤是定义的地方。它的目标是减少的价值错误
变量,这是前面定义的平方差异(一种常见的误差函数)。的0.01
步骤需要努力学习更好的价值。
这里一个重要的注意是我们优化只是一个单一值,但是这个值可以是一个数组。这就是为什么我们使用w
变量,而不是两个独立的变量一个
和b
。
其他优化
TensorFlow一系列类型的优化,和有能力来定义您自己的(如果你是成之类的)。我们如何使用它们的API,看到这个页面。列出的是:
- GradientDescentOptimizer
- AdagradOptimizer
- MomentumOptimizer
- AdamOptimizer
- FtrlOptimizer
- RMSPropOptimizer
其他优化方法TensorFlow可能在将来的版本中出现,或在第三方代码。说,上述优化要满足最深度学习技术。如果你不确定使用哪一种使用GradientDescentOptimizer除非是失败。
策划的错误
我们可以画出错误每次迭代后得到以下输出:
这是一个小改变的代码。首先,我们创建一个表来存储错误。然后,循环内部,我们显式计算train_op
和错误
。我们做这一行,所以这个错误只计算一次。如果我们这么做是单独的行,它将计算错误,然后训练步骤,这样做,它将需要再计算错误。
下面我把下面的代码只是为了tf.global_variables_initializer ()
线从之前的计划——这条线以上的一切都是相同的。
您可能已经注意到,我把窗口的平均水平——使用np.mean(错误(i-50:我))
而不是使用错误(我)
。这样做的原因是,我们只做一个测试循环,因此,虽然错误往往减少,反射在不少。在这个窗口的平均平滑一点,但你可以在上面看到的,它仍然跳来跳去。
1)创建一个收敛函数k - means第六课的例子,停止训练如果质心和新老质心之间的距离小于一个给定的ε值。
2)尝试分离一个
和b
值梯度下降(在示例w
使用)。
3)我们的示例火车上只是一个例子,这是低效的。扩展它来学习使用数量(50)的训练样本。