丹凤千字科普:crx文件安装后可以删除吗(详细资料介绍)

在TensorFlow 1.3版本中,有一些非常重要的特性值得你去尝试,特别是数据集(Datasets)和评估器(Estimators)。
数据集(Datasets)是一种全新的创建输入流水线的方法,它将数据读取到程序中。使用数据集,你可以更简洁、更高效地处理数据,尤其是在处理大规模数据集时。
评估器(Estimators)是一种创建TensorFlow模型的高级方法。它提供预制模型用于常见的机器学习任务,同时你也可以使用它们来创建自定义模型。
接下来,我们将通过一个鸢尾花分类的示例来展示如何结合使用这两个特性。
为了更深入地探索这些特性,我们将构建一个深度网络分类器模型。你将在这里找到完整的代码资源(链接),其中包含关于训练和测试文件的说明。
这个模型根据四个植物特征(萼片长度、萼片宽度、花瓣长度和花瓣宽度)对鸢尾花进行分类。在推理过程中,你可以为这四个特征提供值,模型将预测该花是三种美丽变体之一。
我们将使用以下结构来训练一个深度网络分类器:所有输入和输出值都将为float32类型,输出值的和为1(正如我们所预测的每个单独鸢尾花类型的概率)。
例如,一个输出结果是山鸢尾花的概率为0.05,杂色鸢尾花的概率为0.9,维吉尼亚鸢尾花的概率为0.05,这表明该花是杂色鸢尾花的概率为90%。
现在我们已经定义了模型,接下来看看如何使用数据集和评估器对其进行训练和预测。
让我们简要介绍一下数据集。数据集API为TensorFlow模型创建输入流水线提供了一种新的、更简洁的方式。相较于使用feed_dict或基于队列的流水线,这个API更为强大和易用。虽然目前在1.3版本中,数据集还位于tf.contrib.data中,但我们预期将其移动到1.4版本中,所以现在是对其进行测试的绝佳时机。
我们的数据集将由CSV文件中的数据组成,每行包含五个值——四个输入值和标签。标签将是:0为山鸢尾花、1为杂色鸢尾花、2为维吉尼亚鸢尾花。为了描述我们的数据集,我们首先创建一个关于特征的列表。然后,我们需要一个函数,当训练模型时,它会读取输入文件并返回特征和标签数据。评估器要求你按照特定格式创建此函数。这个函数必须返回一个双元素元组,其中第一个元素是一个字典,键是输入特征,值是训练批量的列表。第二个元素是训练批量的标签列表。由于我们返回了一批输入特征和训练标签,所以这意味着返回语句中的所有列表都将具有相同的长度。在这里提到的所有“列表”,实际上是指一个1-d TensorFlow张量。
为了实现此功能,我们将使用数据集API封装一个“输入函数”,它将适应我们的评估器模型。以下是使用数据集API实现此功能的方法。我们将把它封装在一个“输入函数”中,它将适应我们的馈送评估器模型。以下是如何定义并使用此函数的方法:定义函数后,我们可以将其用于训练和评估我们的模型。只需调用评估器的train和evaluate方法,并将我们的输入函数作为参数传递即可。非常简单!使用评估器进行训练和评估只需一行代码!这是因为评估器处理了大量样板代码的生成,使得训练、评估和预测变得非常简单。只需指定输入数据和模型目录即可开始训练!同样地,评估也只需要一行代码即可完成!只需指定输入数据和所需的评估指标即可开始评估!而对于预测,我们只需调用预测方法并传递我们的输入函数即可!非常方便!当然在实际应用中还需要处理一些细节问题比如数据的预处理、模型的保存和加载等等但总体来说使用评估器进行训练和预测是非常简单和方便的。除了训练和评估之外我们还可以对内存中的数据进行预测而不需要改变任何代码!只需要将内存中的数据作为输入传递给预测方法即可得到预测结果非常方便实用!总的来说使用TensorFlow 1.3版本中的数据集和评估器可以更加高效地进行机器学习任务让我们更专注于模型的构建和优化而不是繁琐的数据处理和代码编写工作!相反,我们将使用内存结构来配置Dataset API,如下所示:
我们来创建一个用于预测的内存数据集。我们从FILE_TEST中选取了前三个样本作为预测输入。例如:
prediction_input = [[5.9, 3.0, 4.2, 1.5], 对应 Iris Versicolor
[6.9, 3.1, 5.4, 2.1], 对应 Iris Virginica
[5.1, 3.3, 1.7, 0.5]] 对应 Iris Sentosa
接下来,我们定义一个名为new_input_fn的函数来处理输入数据:
def new_input_fn():
def decode(x):
x = tf.split(x, 4) 将输入数据拆分为四个特征
在预测时,我们不需要(也没有)标签
return dict(zip(feature_names, x)) 构建一个字典
使用from_tensor_slices函数以内存结构作为输入
dataset = tf.contrib.data.Dataset.from_tensor_slices(prediction_input)
dataset = dataset.map(decode)
iterator = dataset.make_one_shot_iterator()
next_feature_batch = iterator.get_next()
return next_feature_batch, None 在预测时,我们没有标签
然后,我们使用这个新的输入函数来进行预测:
predict_results = classifier.predict(input_fn=new_input_fn)
现在,我们来打印预测结果:
print("在内存数据上的预测结果")
for idx, prediction in enumerate(predict_results):
type = prediction["class_ids"][0] 获取预测的类别(索引)
if type == 0:
print("我认为:{}, 是Iris Sentosa".format(prediction_input[idx]))
elif type == 1:
print("我认为:{}, 是Iris Versicolor".format(prediction_input[idx]))
else:
print("我认为:{}, 是Iris Virginica".format(prediction_input[idx]))
对于小型数据集,Dataset.from_tensor_slices()是一个很好的选择,因为它专为适合内存的数据集而设计。当我们使用如TextLineDataset这样的数据集进行训练和评估时,文件大小并不是问题,只要我们的内存能够管理随机缓冲区和批量大小即可。
使用预制评估器(如DNNClassifier)具有很多优势。除了易于使用之外,它还提供了内置的评估指标,并创建了可以在TensorBoard中查看的摘要。要查看此报告,请在命令行中启动TensorBoard,如下所示:
tensorboard --logdir=你的模型目录路径
TensorBoard将提供以下数据概览:
- 本篇文章中,我们探讨了数据集和评估器的使用。它们是定义输入数据流和创建模型的重要API,投入时间学习它们是绝对值得的!
要获取更多详细信息,请访问以下链接:
1. 完整源代码可在此处找到。(goo.gl/PdGCRx)
2. Josh Gordon的Jupyter notebook的出色用法。(链接)使用Jupyter notebook,你将学习如何运行具有多种类型特征的更广泛的例子。在我们的模型中,我们只使用了数值特征。
3. 有关数据集,请参阅TensorFlow的程序员指南和参考文档中的新章节。(链接)
4. 有关评估器,也请参阅TensorFlow的程序员指南和参考文档中的新章节以获取更多信息。(链接)
