深度学习 - 25.TF TF1.x VS TF2.x tf.feature_column

63 篇文章 16 订阅
36 篇文章 6 订阅

一.引言

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)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BIT_666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值