# TensorFlow 广度和深度学习的教程

1. 选择广度部分的特征：选择要使用的稀疏基本列和交叉列。
2. 选择深度部分的特征：选择连续列，每个分类列的嵌入维度和隐藏层大小。
3. 将它们一起放入广度和深度模型（DNNLinearCombinedClassifier）。

## 安装

1. 安装 TensorFlow ，请前往此处。
2. 下载 教程代码。
3. 安装 pandas 数据分析库。因为本教程中需要使用 pandas 数据。虽然 tf.learn 不要求 pandas，但是它支持 pandas。安装 pandas：

a. 获取 pip：

# Ubuntu/Linux 64-bit
$sudo apt-get install python-pip python-dev # Mac OS X$ sudo easy_install pip
$sudo easy_install --upgrade six b. 使用 pip 安装 pandas $ sudo pip install pandas

4.执行以下命令来训练教程中描述的线性模型：

\$ python wide_n_deep_tutorial.py --model_type=wide_n_deep

## 定义基本特征列

import tensorflow as tf

gender = tf.feature_column.categorical_column_with_vocabulary_list(
"gender", ["Female", "Male"])
education = tf.feature_column.categorical_column_with_vocabulary_list(
"education", [
"Some-college", "Assoc-acdm", "Assoc-voc", "7th-8th",
"Doctorate", "Prof-school", "5th-6th", "10th", "1st-4th",
"Preschool", "12th"
])
marital_status = tf.feature_column.categorical_column_with_vocabulary_list(
"marital_status", [
"Married-civ-spouse", "Divorced", "Married-spouse-absent",
"Never-married", "Separated", "Married-AF-spouse", "Widowed"
])
relationship = tf.feature_column.categorical_column_with_vocabulary_list(
"relationship", [
"Husband", "Not-in-family", "Wife", "Own-child", "Unmarried",
"Other-relative"
])
workclass = tf.feature_column.categorical_column_with_vocabulary_list(
"workclass", [
"Self-emp-not-inc", "Private", "State-gov", "Federal-gov",
"Local-gov", "?", "Self-emp-inc", "Without-pay", "Never-worked"
])

# 展示一个哈希的例子：
occupation = tf.feature_column.categorical_column_with_hash_bucket(
"occupation", hash_bucket_size=1000)
native_country = tf.feature_column.categorical_column_with_hash_bucket(
"native_country", hash_bucket_size=1000)

# 连续基列
age = tf.feature_column.numeric_column("age")
education_num = tf.feature_column.numeric_column("education_num")
capital_gain = tf.feature_column.numeric_column("capital_gain")
capital_loss = tf.feature_column.numeric_column("capital_loss")
hours_per_week = tf.feature_column.numeric_column("hours_per_week")

# 转换
age_buckets = tf.feature_column.bucketized_column(
age, boundaries=[18, 25, 30, 35, 40, 45, 50, 55, 60, 65])

## 广度模型：具有交叉特征列的线性模型

base_columns = [
gender, native_country, education, occupation, workclass, relationship,
age_buckets,
]

crossed_columns = [
tf.feature_column.crossed_column(
["education", "occupation"], hash_bucket_size=1000),
tf.feature_column.crossed_column(
[age_buckets, "education", "occupation"], hash_bucket_size=1000),
tf.feature_column.crossed_column(
["native_country", "occupation"], hash_bucket_size=1000)
]

## 深度模型：嵌入式神经网络

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,
]

## 将广度和深度模型结合为一体

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])

## 训练和评估模型

import pandas as pd
import urllib

# 为数据集定义列名
CSV_COLUMNS = [
"age", "workclass", "fnlwgt", "education", "education_num",
"marital_status", "occupation", "relationship", "race", "gender",
"capital_gain", "capital_loss", "hours_per_week", "native_country",
"income_bracket"
]

if train_data:
train_file_name = train_data
else:
train_file = tempfile.NamedTemporaryFile(delete=False)
urllib.request.urlretrieve(
train_file.name) # pylint: disable=line-too-long
train_file_name = train_file.name
train_file.close()

if test_data:
test_file_name = test_data
else:
test_file = tempfile.NamedTemporaryFile(delete=False)
urllib.request.urlretrieve(
test_file.name) # pylint: disable=line-too-long
test_file_name = test_file.name
test_file.close()

return train_file_name, test_file_name

def input_fn(data_file, num_epochs, shuffle):
"""Input builder function."""
tf.gfile.Open(data_file),
names=CSV_COLUMNS,
skipinitialspace=True,
engine="python",
skiprows=1)
# 移除 NaN 元素
df_data = df_data.dropna(how="any", axis=0)
labels = df_data["income_bracket"].apply(lambda x: ">50K" in x).astype(int)
return tf.estimator.inputs.pandas_input_fn(
x=df_data,
y=labels,
batch_size=100,
num_epochs=num_epochs,
shuffle=shuffle,
num_threads=5)

# 将 num_epochs 设置为 None，以获得无限的数据流
m.train(
input_fn=input_fn(train_file_name, num_epochs=None, shuffle=True),
steps=train_steps)
# 在所有数据被消耗之前，为了运行评估，设置 steps 为 None
results = m.evaluate(
input_fn=input_fn(test_file_name, num_epochs=1, shuffle=False),
steps=None)
print("model directory = %s" % model_dir)
for key in sorted(results):
print("%s: %s" % (key, results[key]))

End.

0 条评论

• ### 【聚焦】电信大数据变现带来的跨界效应

在这个世界上你最亲密的伙伴是谁？爱人、家人通通都不是，最亲密的伙伴其实是你们的手机。在你每次触控手机时都会产生数据，这些大量的数据都被存储在电信运营商的系统中。...

• ### 【职场】112家IT公司薪水一览表

作者是西电通院2013届毕业硕士，根据今年找工作的情况以及身边同学的汇总，总结各大公司的待遇如下，吐血奉献，公司比较全。以下绝对是各大公司2013届校招的数据，...

• ### [SAS代码模板]抽样_surveyselect

SAS抽样代码模板 黄色部分为套用部分，红色部分为可选部分 ——————————模板—————————— proc surveyselect data=总体数据...

• ### 浅谈CSS3多列布局

相信大家都看过报纸，报纸上的内容大多数都是分栏显示的，如下图所示： ? 对于前端攻城狮来说，这种分列布局，在以前虽然可以实现，可是难度却是不小，工作量很大，必须...

• ### CSS3魔法堂：说说Multi-column Layout

前言  是否记得《读者文摘》中那一篇篇优美感人的文章呢？那除了文章内容外，还记得那报刊、杂志独有的多栏布局吗？  当我们希望将报刊、杂志中的阅读体验迁移到网页...

• ### 浅谈CSS3多列布局

对于前端攻城狮来说，这种分列布局，在以前虽然可以实现，可是难度却是不小，工作量很大，必须使用JavaScript对内容分段，再配合上绝对定位或浮动等CSS样式来...

• ### 特征列feature_column

特征列 通常用于对结构化数据实施特征工程时候使用，图像或者文本数据一般不会用到特征列。

• ### Cassandra API60 Java 代码示例

文档地址 http://wiki.apache.org/cassandra/API06，实现了绝大部分示例

• ### TensorFlow2.X学习笔记(6)--TensorFlow中阶API之特征列、激活函数、模型层

特征列通常用于对结构化数据实施特征工程时候使用，图像或者文本数据一般不会用到特征列。使用特征列可以将类别特征转换为one-hot编码特征，将连续特征构建分桶特征...