tf.train.batchAdamOptimizer().apply_gradients

开发人员常说如果你想开始机器学习,你应该先学习算法是如何工作的但是我的经验表明并不是这样子。

我说你应该首先能够看到大局:应用程序是如何工作的一旦你了解了这一点,深入探索和研究算法的内部工作变得更加容易

那么,你如何发展一种直觉并对机器学习有一个全面的了解呢?一個好的方法是创建机器学习模型

假设你还不知道如何从头开始创建所有这些算法,那么你就需要使用一个已经为你实现了所有这些算法嘚库那个库就是TensorFlow

在本文中我们将创建一个机器学习模型来将文本分类。我们将介绍以下主题:

  1. 如何处理数据并将其传递给神经网络輸入

  2. 如何运行模型并获得预测结果

你可能会学到很多新东西所以我们开始吧!

TensorFlow是一个开源的机器学习库,最初由Google创建图书馆的名字帮助我们理解我们如何使用它:张量是多维数组,流过图的节点



还有很多算法来计算梯度下降,你将使用自适应矩估计(亚当)要在TensorFlow中使用此算法,您需要传递learning_rate值该值确定值的增量步骤以找到最佳权重值。

该方法更新所有的tf.Variables新值所以我们不需要传递变量列表。现在你囿了训练网络的代码:

 

您将使用的数据集有许多英文文本我们需要操纵这些数据将其传递到神经网络。要做到这一点你会做两件事情:

  1. 为每个单词创建一个索引

  2. 为每个文本创建一个矩阵,如果文本中有一个单词则值为1,否则为0

让我们看看代码来理解这个过程:

在上面嘚例子中文字是“Hi from Brazil”,矩阵是1.1.1如果文本只是“Hi”呢?

您将与标签(文本的类别)相同但是现在您将使用单一编码:

 

现在是最好的部汾:从模型中获得结果。首先让我们仔细看看输入数据集

您将使用20个新闻组,这是一个包含20个主题的18.000个帖子的数据集加载这个数据集,你将使用scikit学习库我们将只使用3个类别:comp.graphicssci.spacerec.sport.baseballscikit学习有两个子集:一个用于训练,一个用于测试建议您不要看测试数据,因为这会在創建模型时影响您的选择你不想创建一个模型来预测这个特定的测试数据,你想创建一个具有良好泛化的模型

这是你将如何加载数据集:

神经网络术语中所有训练样例中的一个历元=一个正向传递(获得输出值)和一个反向传递(更新权重)

记住这个tf.Session.run()方法吗?让我們仔细看看它:

在本文开头的数据流图中您使用了sum操作,但是我们也可以传递一个事件列表来运行在这个神经网络运行中,您将通过兩件事情:损失计算和优化步骤

feed_dict参数是我们传递数据每次运行一步。为了传递这些数据我们需要定义tf.placeholders(提供feed_dict)。

“占位符的存在完铨是为了作为Feed的目标它没有被初始化,也没有数据“ -来源

所以你会这样定义你的占位符:

“如果使用占位符来提供输入,则可以通過使用tf.placeholder(...shape = [ None,...])创建占位符来指定变量批量维度__形状的None元素对应于可变尺寸的维度。“

在测试模型时我们会用更大的批量来填充字典,这就是为什么您需要定义一个变量批量维度的原因

get_batches()功能为我们提供了批量大小的文本数量。现在我们可以运行模型:

现在你已经训練了模型为了测试它,你还需要创建图形元素我们将测量模型的准确性,所以您需要得到预测值的索引和正确值的索引(因为我们使鼡的是单热编码)检查它们是否相等,并计算均值所有的测试数据集:

}

我要回帖

更多关于 tf.train.batch 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信