我是靠谱客的博主 伶俐丝袜,最近开发中收集的这篇文章主要介绍深度学习 - 25.TF TF1.x VS TF2.x tf.feature_column,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一.引言

Tensorflow Esitimator 场景下常用到 feature column 对原始特征进行处理,TF1 与 TF2 在 feature column 的使用上有一些不同,下面通过两个简单例子区分。

二.TF 1.x feature column

1.定义特征列

常见的特征列如下,这里我们结合 bucketized_column + numeric_column 构造特征列

CSDN-BITDDD

年龄分桶,这里通过 10-90 作为边界,形成了10个分桶。

    age_bucket = tf.feature_column.bucketized_column(
        tf.feature_column.numeric_column(key='age_bucket', shape=(1,),
                                         default_value=0,
                                         dtype=tf.dtypes.float32),
        boundaries=[10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0])

2.通过特征列处理特征

通过 feature_column.input_layer 处理 features 得到 dense feature。

    age_bucket = tf.feature_column.bucketized_column(
        tf.feature_column.numeric_column(key='age_bucket', shape=(1,),
                                         default_value=0,
                                         dtype=tf.dtypes.float32),
        boundaries=[10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0])

示例:

fetures 构造特征 Map,通过与 feature_column 相同的 key 建立关联,得到特征值的 one-hot 向量,这里特征值维度为3,分桶数为10,所以最终的结果维度为 3x10。

    features = {}
    features['age_bucket'] = [[23.0], [35.0], [68.0]]
    one_hot = tf.feature_column.input_layer(features, [age_bucket])

    with tf.Session() as sess:
        print(sess.run(one_hot))
Tensor("input_layer/concat:0", shape=(3, 10), dtype=float32)
[[0. 0. 1. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]]

三.TF 2.x feature column

在 TF2 复现代码时,发现很多 TF1 的 API 已经不支持了,定义特征列的方法没有变,但是调用特征列生成对应特征的方式发生了改变。

1.定义特征列

特征列定义不变,仍然是 bucketized_column + numeric_column 构造的年龄分桶。

    age_bucket = tf.feature_column.bucketized_column(
        tf.feature_column.numeric_column(key='age_bucket', shape=(1,),
                                         default_value=0,
                                         dtype=tf.dtypes.float32),
        boundaries=[10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0])

2.通过特征列处理特征

通过 layers.DenseFeatures 处理 features 得到 dense feature。

class DenseFeatures(dense_features.DenseFeatures):
    def __init__(self,
               feature_columns,
               trainable=True,
               name=None,
               **kwargs):
    super(DenseFeatures, self).__init__(
        feature_columns=feature_columns,
        trainable=trainable,
        name=name,
        **kwargs)
    self._state_manager = fc._StateManagerImplV2(self, self.trainable)  # pylint: disable=protected-access

示例: 

    features = {}
    features['age_bucket'] = [[23.0], [35.0], [68.0]]
    feature_layer = tf.keras.layers.DenseFeatures(age_bucket)
    inputs = feature_layer(features)  
    print(inputs)

通过 bucket- feature_column 可以得到 None x BucketSize 的 one-hot 向量。TF1 与 TF2 的主要区别就是特征处理阶段,前者通过 feature_column 的 input_layer API 实现 ,后者则可以通过 layers.DenseFeatures 实现,其中 input_layer 接口已经不存在。

tf.Tensor(
[[0. 0. 1. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]], shape=(3, 10), dtype=float32)

更多推荐算法相关深度学习:深度学习导读专栏 

最后

以上就是伶俐丝袜为你收集整理的深度学习 - 25.TF TF1.x VS TF2.x tf.feature_column的全部内容,希望文章能够帮你解决深度学习 - 25.TF TF1.x VS TF2.x tf.feature_column所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(120)

评论列表共有 0 条评论

立即
投稿
返回
顶部