页面树结构

2017-11-09 ApacheCN 开源组织,第二期邀请成员活动,一起走的更远 : http://www.apachecn.org/member/209.html


MachineLearning 优酷地址 : http://i.youku.com/apachecn

转至元数据结尾
转至元数据起始

tf.learn API提供了一系列丰富的工具,用于在TensorFlow中处理线性模型。本文档概述了这些工具。它解释:

  • 什么是线性模型。
  • 你为什么要使用线性模型。
  • tf.learn如何在TensorFlow中轻松构建线性模型。
  • 如何使用tf.learn将线性模型与深度学习相结合,以获得两者的优势。

阅读此概述以决定tf.learn线性模型工具是否对您有用。然后做线性模型教程试一试。本概述使用教程中的代码示例,但本教程将详细介绍代码。

要理解这个概述,它将有助于熟悉基本的机器学习概念,以及 tf.learn

 

什么是线性模型?

线性模型使用的特征的单加权和以进行预测。举例来说,如果你有数据 上的年龄,受教育年限,和每周小时人口的工作,可以让他们的加权和估计一个人的薪水学习为每个数字的权重。您还可以使用线性模型进行分类。

一些线性模型将加权和转化为更方便的形式。例如,逻辑回归将加权和插入到逻辑函数中,以将输出转换为0到1之间的值。但是,对于每个输入特征,您仍然拥有一个权重。

 

为什么要使用线性模型?

当最近的研究已经证明了具有多层次的更复杂的神经网络的力量时,为什么要使用这么简单的模型?

线性模型:

  • 训练很快,与深层神经网相比。
  • 可以在非常大的功能集上正常工作。
  • 可以用不需要大量学习率的算法进行训练。
  • 可以比神经网络更容易解释和调试。您可以检查分配给每个功能的权重,以确定对预测具有最大影响的内容。
  • 为学习机器学习提供了极好的出发点。
  • 被广泛应用于工业。

 

tf.learn如何帮助您构建线性模型?

您可以在TensorFlow中从头开始构建一个线性模型,而无需特殊API的帮助。但是,tf.learn提供了一些工具,可以更轻松地构建有效的大规模线性模型。

功能列和转换

设计线性模型的大部分工作包括将原始数据转换为合适的输入特征。tf.learn使用FeatureColumn抽象来启用这些转换。

FeatureColumn表示数据中的单个功能。A FeatureColumn 可以表示像“height”这样的数量,或者它可以表示像“eye_color”这样的类别,其中值是从一组离散的可能性(如“蓝色”,“棕色”,“绿色”)中绘出的。

在像“height”这样的连续特征和“eye_color” 这样的分类功能的情况下,数据中的单个值在输入到模型之前可能会被转换成一个数字序列。尽管有这个事实, 抽象可以将功能操作为单个语义单元。您可以指定转换并选择要包含的要素,而无需处理您提供给模型的张量中的特定索引。  FeatureColumn 

稀疏列

线性模型中的分类特征通常被转换为稀疏向量,其中每个可能值具有相应的索引或ID。例如,如果只有三种可能的眼睛颜色,您可以将“eye_color”表示为长度3向量:“棕色”将变为[1,0,0],“蓝色”将变为[0,1,0]绿色“将变为[0,0,1]。这些向量称为“稀疏”,因为它们可能非常长,当许多零可能的值非常大时(如所有英文单词),都有许多零。

虽然您不需要使用稀疏列来使用tf.learn线性模型,但是线性模型的优点之一是它们处理大型稀疏向量的能力。稀疏特征是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(),它使用哈希函数将索引分配给要素值。

education = tf.contrib.layers.sparse_column_with_hash_bucket(\
    "education", hash_bucket_size=1000)
特征十字架

因为线性模型为独立的特征赋予独立的权重,所以它们不能了解特征值的特定组合的相对重要性。如果你有一个功能'favorite_sport'和一个功能'home_city',你想预测一个人是否喜欢穿红色,你的线性模型将无法了解来自圣路易斯的棒球迷特别喜欢穿红。

您可以通过创建一个新功能“favorite_sport_x_home_city”来解决这个限制。给定人员的此功能的值只是两个源功能的值的连接:例如“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, city], hash_bucket_size=int(1e4))

连续列

您可以指定如下所示的连续功能:

age = tf.contrib.layers.real_valued_column("age")
尽管作为一个实数,一个连续的特征通常可以直接输入到模型中,tf.learn也为这种列提供了有用的转换。
桶化

Bucketization将一个连续的列变成一个分类列。此转换可让您在功能十字架中使用连续功能,或者了解特定值范围特别重要的情况。

Bucketization将可能值的范围划分为称为存储桶的子范围:

age_buckets = tf.contrib.layers.bucketized_column(
    age, boundaries=[18, 25, 30, 35, 40, 45, 50, 55, 60, 65])
价值下降的桶成为该值的分类标签。

输入功能

FeatureColumns为您的模型的输入数据提供了一个规范,指示如何表示和转换数据。但是它们不提供数据本身。您通过输入功能提供数据。

输入函数必须返回张量词典。每个键对应于a的名称FeatureColumn。每个键的值是包含所有数据实例的该功能的值的张量。请参阅 使用tf.contrib.learn构建输入函数,以更全面地了解输入函数,以及 输入函数示例实现input_fn的 线性模型教程代码

输入功能被传递给fit()evaluate()启动培训和测试的呼叫,如下一节所述。

线性估计

tf.learn的估计类为回归和分类模型提供统一的培训和评估工具。他们处理训练和评估循环的细节,并允许用户专注于模型输入和架构。

要构建一个线性估计器,您可以分别使用 tf.contrib.learn.LinearClassifier估计器或tf.contrib.learn.LinearRegressor估计器进行分类和回归。

与所有tf.learn估计器一样,只需运行估计器:

  1. 实例化估计器类。对于两个线性估计器类,您将FeatureColumns 的列表传递给构造函数。
  2. 调用估计器的fit()方法进行训练。
  3. 调用估计器的evaluate()方法来查看它的作用。

例如:

e = tf.contrib.learn.LinearClassifier(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.evaluate(input_fn=input_fn_test, steps=1)

# Print the stats for the evaluation.
for key in sorted(results):
    print("%s: %s" % (key, results[key]))

广泛而深入的学习

tf.learn API还提供了一个估计类,可以让您联合训练线性模型和深层神经网络。这种新颖的方法结合了线性模型“记忆”关键特征与神经网络泛化能力的能力。使用tf.contrib.learn.DNNLinearCombinedClassifier创造这种“宽而深”的模式:

e = tf.contrib.learn.DNNLinearCombinedClassifier(
    model_dir=YOUR_MODEL_DIR,
    linear_feature_columns=wide_columns,
    dnn_feature_columns=deep_columns,
    dnn_hidden_units=[100, 50])
有关更多信息,请参阅宽和深度学习教程

  • 无标签