1、具有TensorFlow的大规模线性模型什么是线性模型?为什么要使用线性模型?tf.learn如何帮助您构建线性模型?功能列和转换稀疏列编码稀疏列特征十字架连续列桶化输入功能线性估计广泛而深入的学习原文链接 : https:/www.tensorflow.org/tutorials/linear译文链接 : http:/www.apache.wiki/pages/viewpage.action?pageId=10029470贡献者 : 片刻 ApacheCN Apache中文网tf.learn API提供了一系列丰富的工具,用于在TensorFlow中处理线性模型。本文档概述了这些工具。它解释
2、:什么是线性模型。你为什么要使用线性模型。tf.learn如何在TensorFlow中轻松构建线性模型。如何使用tf.learn将线性模型与深度学习相结合,以获得两者的优势。阅读此概述以决定tf.learn线性模型工具是否对您有用。然后做 试一试。本概述使用教程中的代码示例,但本教程将详细介绍代码线性模型教程。要理解这个概述,它将有助于熟悉基本的机器学习概念,以及 。tf.learn什么是线性模型?甲 使用的特征的单加权和以进行预测。举例来说,如果你有 上的年龄,受教育年限,和每周小时人口的工作,可以让他们的加权线性模型 数据和估计一个人的薪水学习为每个数字的权重。您还可以使用线性模型进行分类
3、。一些线性模型将加权和转化为更方便的形式。例如, 将加权和插入到逻辑函数中,以将输出转换为0到1之间的值。但是,对于每个输逻辑回归入特征,您仍然拥有一个权重。为什么要使用线性模型?当最近的研究已经证明了具有多层次的更复杂的神经网络的力量时,为什么要使用这么简单的模型?线性模型:训练很快,与深层神经网相比。可以在非常大的功能集上正常工作。可以用不需要大量学习率的算法进行训练。可以比神经网络更容易解释和调试。您可以检查分配给每个功能的权重,以确定对预测具有最大影响的内容。为学习机器学习提供了极好的出发点。被广泛应用于工业。tf.learn如何帮助您构建线性模型?您可以在TensorFlow中从头开
4、始构建一个线性模型,而无需特殊API的帮助。但是,tf.learn提供了一些工具,可以更轻松地构建有效的大规模线性模型。功能列和转换设计线性模型的大部分工作包括将原始数据转换为合适的输入特征。tf.learn使用 抽象来启用这些转换。FeatureColumnA 表示数据中的单个功能。A 可以表示像“height”这样的数量,或者它可以表示像“eye_color”这样的FeatureColumn FeatureColumn类别,其中值是从一组离散的可能性(如“蓝色”,“棕色”,“绿色”)中绘出的。在像“height”这样的 和“eye_color” 这样的 的情况下,数据中的单个值在输入到模型
5、之前可能会被转换成一个数字序列连续特征 分类功能。尽管有这个事实, 抽象可以将功能操作为单个语义单元。您可以指定转换并选择要包含的要素,而无需处理您提供给模型的张量中的特定索引。 FeatureColumn稀疏列线性模型中的分类特征通常被转换为稀疏向量,其中每个可能值具有相应的索引或ID。例如,如果只有三种可能的眼睛颜色,您可以将“eye_color”表示为长度3向量:“棕色”将变为1,0,0,“蓝色”将变为0,1,0绿色“将变为0,0,1。这些向量称为“稀疏”,因为它们可能非常长,当许多零可能的值非常大时(如所有英文单词),都有许多零。虽然您不需要使用稀疏列来使用tf.learn线性模型,但
6、是线性模型的优点之一是它们处理大型稀疏向量的能力。稀疏特征是tf.learn线性模型工具的主要用例。编码稀疏列FeatureColumn 处理自动将分类值转换为向量,代码如下:eye_color = tf.contrib.layers.sparse_column_with_keys(column_name=“eye_color“, keys=“blue“, “brown“, “green“) eye_color您也可以生成 不具有所有可能值的分类功能。对于这种情况,您将使用 ,它使用FeatureColumn sparse_column_with_hash_bucket()哈希函数将索引分配给
7、要素值。education = tf.contrib.layers.sparse_column_with_hash_bucket(“education“, hash_bucket_size=1000)特征十字架因为线性模型为独立的特征赋予独立的权重,所以它们不能了解特征值的特定组合的相对重要性。如果你有一个功能favorite_sport和一个功能home_city,你想预测一个人是否喜欢穿红色,你的线性模型将无法了解来自圣路易斯的棒球迷特别喜欢穿红。您可以通过创建一个新功能“favorite_sport_x_home_city”来解决这个限制。给定人员的此功能的值只是两个源功能的值的连接:例
8、如“baseball_x_stlouis”。这种组合特征称为 。特征十字该 方法可以方便地设置特征十字:crossed_column()sport = tf.contrib.layers.sparse_column_with_hash_bucket(“sport“, hash_bucket_size=1000)city = tf.contrib.layers.sparse_column_with_hash_bucket(“city“, hash_bucket_size=1000)sport_x_city = tf.contrib.layers.crossed_column(sport, cit
9、y, hash_bucket_size=int(1e4)连续列您可以指定如下所示的连续功能:age = tf.contrib.layers.real_valued_column(“age“)tf.learn桶化Bucketization将一个连续的列变成一个分类列。此转换可让您在功能十字架中使用连续功能,或者了解特定值范围特别重要的情况。1. 2. 3. Bucketization将可能值的范围划分为称为存储桶的子范围:age_buckets = tf.contrib.layers.bucketized_column(age, boundaries=18, 25, 30, 35, 40, 45
10、, 50, 55, 60, 65)输入功能FeatureColumns为您的模型的输入数据提供了一个规范,指示如何表示和转换数据。但是它们不提供数据本身。您通过输入功能提供数据。输入函数必须返回张量词典。每个键对应于a的名称 。每个键的值是包含所有数据实例的该功能的值的张量。请参阅 FeatureColumn 使用tf.c以更全面地了解输入函数,以及 输入函数示例实现 的 。ontrib.learn构建输入函数, input_fn 线性模型教程代码输入功能被传递给 和 启动培训和测试的呼叫,如下一节所述。fit() evaluate()线性估计tf.learn的估计类为回归和分类模型提供统一的
11、培训和评估工具。他们处理训练和评估循环的细节,并允许用户专注于模型输入和架构。要构建一个线性估计器,您可以分别使用 估计器或 估tf.contrib.learn.LinearClassifier tf.contrib.learn.LinearRegressor计器进行分类和回归。与所有tf.learn估计器一样,只需运行估计器:实例化估计器类。对于两个线性估计器类,您将 s 的列表传递给构造函数。FeatureColumn调用估计器的 方法进行训练。fit()调用估计器的 方法来查看它的作用。evaluate()例如:e = tf.contrib.learn.LinearClassifier(
12、feature_columns=native_country, education, occupation, workclass, marital_status,race, age_buckets, education_x_occupation,age_buckets_x_race_x_occupation,model_dir=YOUR_MODEL_DIRECTORY)e.fit(input_fn=input_fn_train, steps=200)# Evaluate for one step (one pass through the test data).results = e.eval
13、uate(input_fn=input_fn_test, steps=1)# Print the stats for the evaluation.for key in sorted(results):print(“%s: %s“ % (key, resultskey)广泛而深入的学习tf.learnAPI还提供了一个估计类,可以让您联合训练线性模型和深层神经网络。这种新颖的方法结合了线性模型“记忆”关键特征与神经网络泛化能力的能力。使用 创造这种“宽而深”的模式:tf.contrib.learn.DNNLinearCombinedClassifiere = tf.contrib.learn.DNNLinearCombinedClassifier(model_dir=YOUR_MODEL_DIR,linear_feature_columns=wide_columns,dnn_feature_columns=deep_columns,dnn_hidden_units=100, 50)