深度模型:嵌入式神经收集
具有交叉特点列的广度模许可以有效地记忆特点之间的稀少交互。也就是说,交叉特点列不克不及概括没有在练习数据中出现的特点组合。让我们采取嵌入方法来添加一个深度模型来修复这个问题。
我们将应用 embedding_column 设备分类嵌入列,并将它们与持续列连接:
- deep_columns = [
- tf.feature_column.indicator_column(workclass),
- tf.feature_column.indicator_column(education),
- tf.feature_column.indicator_column(gender),
- tf.feature_column.indicator_column(relationship),
- # 展示一个嵌仁攀例子
- tf.feature_column.embedding_column(native_country, dimension=8),
- tf.feature_column.embedding_column(occupation, dimension=8),
- age,
- education_num,
- capital_gain,
- capital_loss,
- hours_per_week,
- ]
嵌入的 dimension 越高,自由度就越高,模型将不得不进修这些特点的表示。为了简单起见,我们设置所有特点列的维度为 8。大年夜经验上看,关于维度的设定最好是大年夜 \log_{2}(n) 或 k\sqrt[4]{n} 值开端,这里的 n 代表特点列中独一特点的数量,k 是一个很小的常量(平日小于10)。
经由过程密集嵌入,深度模许可以更好的概括,并更好对之前没有在练习数据中碰见的特点进行猜测。然而,当两个特点列之间的底层交互矩阵是稀少和高等级时,很难进修特点列的有效低维度表示。在这种情况下,大年夜多半特点对之间的交淮竽暌功该为零,除了少数几个,但密集的嵌入将导致所有特点对的非零猜测,大年夜而可能过度泛化。另一方面,具有交叉特点的线性模许可以用更少的模型参数有效地记住这些“异惯例则”。
如今,我们来看看若何结合练习广度和深度模型,让它们优势和劣势互补。
上图展示了广度模型(具有稀少特点和转换鹁?的 logistic 回归模型),深度模型(具有一个嵌入层和多个隐蔽层的前馈神经收集),广度和深度模型(两者的结合练习)的差别比较。在高层级里,只须要经由过程以下三个步调就能应用 TF.Learn API 设备广度,深度或广度和深度模型。
-
将广度和深度模型结合为一体
经由过程将其最终输出的对数几率作为猜测结合起来,然后将猜测供给给 logistic 损掉函数,将广度模型和深度模型相结合。所有的图形定义和变量分派都已经被处理,所以你只须要创建一个 DNNLinearCombinedClassifier:
- import tempfile
- model_dir = tempfile.mkdtemp()
- m = tf.contrib.learn.DNNLinearCombinedClassifier(
- model_dir=model_dir,
- linear_feature_columns=wide_columns,
- dnn_feature_columns=deep_columns,
- dnn_hidden_units=[100, 50])
练习和评估模型
在练习模型之前,请先浏览人口普查数据集,就像在 《TensorFlow Liner Model Tutorial》 中所做的一样。 输入数据处理的代码再次为你供给便利:
- import pandas as pd
- import urllib
- # 为数据集定义列名
- CSV_COLUMNS = [
- "age", "workclass", "fnlwgt", "education", "education_num",
- "marital_status", "occupation", "relationship", "race", "gender",
- "capital_gain",
推荐阅读
CTO练习营 | 12月3-5日,深圳,是时刻成为优良的技巧治理者了 今日头条开创人兼CEO张一鸣我们要实现本身的愿景,必须在全球范围内去解决三个问题:第一个是应用处景的问题,这本质上是一个>>>详细阅读
本文标题:TensorFlow广度和深度学习的教程
地址:http://www.17bianji.com/lsqh/39382.html
1/2 1