tensorflow feature_column详解

关于 feature_column官网说的 还比较少,其它说明 大多数 都是 直接 翻译 官网解释,很明显,达不到效果,现在 对feature_column进行说明,更详细的说明,可以参照github:

https://github.com/AlbertBJ/tensorflow-summary

此外,我还对 estimator进行了总结 以及 如何使用的 例子,github:

https://github.com/AlbertBJ/estimator

欢迎star

下面 大概 说一下 fc(feature_column)的作用,

tensorflow feature_column详解

这是 官方的 对 fc在 tf的life time的定义:fc原始数据和estimator模型之间的桥梁

下面这张图 也是 从 官方来的,关于 fc的分类的,这个结构很重要,因为下面有的function的参数类型是有特定要求的。

tensorflow feature_column详解

 

 

1。 先说一下 input layer

tf.feature_column.input_layer(

features,

feature_columns,

weight_collections=None,

trainable=True,

cols_to_vars=None,

cols_to_output_tensors=None

)

使用 input_layer 作为model的一个 input layer

features:字典,最主要的是 dict的key一定要与 feature_columns的key一致,后续才能 才能根据key进行匹配

feature_columns:改参数必须是 继承于DenseColumn的numeric_column, embedding_column, bucketized_column, indicator_column。如果feature是类别的,那么必须先 用embedding_column or indicator_column封装一下使用.注意此处fc要求的类型。

2。tf.feature_column.numeric_column

numeric_column这个api没有什么 可多说的,就是 用来标识feature类型,以及 normalization的操作。要记住,为什么需要 这个api,因为进入 nn的数据必须是数字类型的,关于参数 说明,以及例子,见github

3.categorical_column_with_*

这几个方法 都是 将 原始数据转换为 类别数据的API,比如,将 '男',‘女’分别标示为0,1。在github上对每一个 API都有操作和说明

4。 tf.feature_column.indicator_column

tf.feature_column.indicator_column(categorical_column)

 

参数:

必须是categorical_column,如上面图可知 ,只有 categorical_column_with_* ,crossed_column 以及bucketized_column 类型的column 才可以使用该函数

 

作用:将 categorical_column表示成 multi-hot形式的 dense tensor。

 

下面 官方 还特意 提到了 一点就是:

indicator_column 可以将 任意的 categorical_column_with_*作为参数(同我上面说的一致),

但是,如果 说 buckets/unique(分箱,或者 ont-hot) 的值 比较大的时候,还是 建议使用 embedding_column

5。 tf.feature_column.bucketized_column

tf.feature_column.bucketized_column(<br>

source_column,<br>

boundaries<br>

)

<br>分箱,目的是 离散化 数据,比如 将 年龄 字段 划分为 少年,青年,壮年以及老年<br>

参数:<br>

 

source_column: numeric_column

<br>

boundaries: 边界列表,形成 左闭右开 区间,比如 [1,2,3],那么拆分后的边界将是 (-inf,1),[1,2),[2,3),[3,+inf) 四个区间<br>

6。 tf.feature_column.crossed_column

<br>

tf.feature_column.crossed_column(<br>

keys,<br>

hash_bucket_size,<br>

hash_key=None<br>

)<br>

说明:该函数的作用主要是 通过笛卡尔积 产生 新的特征;然后经过hash算法 产生最终特征:Hash(特征的笛卡尔积) % hash_bucket_size<br>

参数:<br>

keys:指明 那些 feature 需要进行 合并 形成新的特征,注意,该值的类型可以是 string(也就是数据集的column),也可以是 经过变换后的 categoricalColumn, but,不支持 hashed categorical<br>

hash_bucket_size: 分箱的 长度,可以理解为 合并后 数据的列数<br>

7。 tf.feature_column.embedding_column<br>

 

tf.feature_column.embedding_column(<br>

categorical_column,<br>

dimension,<br>

combiner='mean',<br>

initializer=None,<br>

ckpt_to_load_from=None,<br>

tensor_name_in_ckpt=None,<br>

max_norm=None,<br>

trainable=True<br>

)<br>

 

该方法和indicator_column一样,只接受 categorical_column,目的是将 稀疏矩阵转换为稠密矩阵, word2vec<br>

参数:<br>

categorical_column:入参categorical_column_with_*的返回<br>

dimension: embedding 的维度,一般计算规则是 类别开4次方,但是也可以根据需要自行设置<br>

combiner: 多个 vector的 组合方式,有 mean(default),sqrtn以及sum<br>

initializer:embedding matrix的初始化值,默认 均值0,标准差 1/sqrt(dimension)的tf.truncated_normal_initializer <br>

ckpt_to_load_from以及tensor_name_in_ckpt 主要是为了使用pre-trained embedding matrix <br>

max_norm: if not 'None',则使用l2 归一化<br>

trainable: 是否可训练的

详见上面 github地址

 

 

知乎:https://zhuanlan.zhihu.com/albertwang

微信公众号:AI-Research-Studio

tensorflow feature_column详解 ​​

下面是赞赏码

tensorflow feature_column详解