TensorFlow系列——feature_column特征工具说明

一、一些工具

1、三种本地打印输出非序列sequence数据的feature_column转换后的值的方法

适用于TensorFlow1.x

import tensorflow as tf
from tensorflow.python.feature_column import feature_column_v2 as fc_v2
from tensorflow.python.feature_column import feature_column as fc
# 注意:只有方式2会检查输入数据是否符合feature_column的定义
def numeric_column():
    column = tf.feature_column.numeric_column(
        key="feature",
        shape=(3,2,1,),
        default_value=100,
        dtype=tf.float32,
        normalizer_fn=lambda x: x / 2)
    features = {"feature": tf.constant(value=[
            [[1, 2], [3, 4], [5, 6]],
            [[7, 8], [9, 10], [11, 12]]
        ])}

    # feature_column处理方式:1
    feature_cache = fc_v2.FeatureTransformationCache(features=
        features
    )
    rs_1 = column.get_dense_tensor(transformation_cache=feature_cache, state_manager=None)

    # feature_column处理方式:2
    net = tf.feature_column.input_layer(features,column)

    # feature_column处理方式:3
    builder = fc._LazyBuilder(features)
    rs_3 = column._get_dense_tensor(builder,None)
    with tf.Session() as sess:
        print(sess.run(rs_1))
        print(sess.run(net))
        print(sess.run(rs_3))

numeric_column()

2、三种打印序列sequence数据的feature_column转换后的值的方法

适用于TensorFlow1.x

2.1、序列特征sequence的作用

参考:深度学习之TensorFlow工程化项目实战

2.2、如何使用序列sequence特征

import tensorflow as tf
from tensorflow.python.feature_column import feature_column_v2 as fc_v2
from tensorflow.python.feature_column import feature_column as fc
from tensorflow.python.feature_column import feature_column_lib as fcl
from tensorflow.python.feature_column import sequence_feature_column as sqfc
def sequence_numeric_column():
    # 用法同numeric_column基本一致
    column = tf.feature_column.sequence_numeric_column(
        key="feature",
        # shape指定序列中每个元素的形状
        # 最终返回结构的形状为[batch_size, element_count/sum(shape[:]) ,shape]
        # 该值的设置只会影响dense_tensor。sequence_length只和实际输入数据有关
        shape=(3,),
        default_value=60,
        dtype=tf.float32,
        normalizer_fn=lambda x: x / 2)
    column2 = tf.contrib.feature_column.sequence_numeric_column(
        key="feature",
        shape=(3,),
        default_value=60,
        dtype=tf.float32,
        normalizer_fn=lambda x: x / 2)
    features = {
        # feature对应的值必须为SparseTensor
        "feature": tf.SparseTensor(
            # indices要按顺序写
            indices=[
                [0, 0, 1],
                [0, 1, 0],
                [0, 5, 0],
                [0, 5, 1],
                [1, 2, 1],
                [1, 3, 0],
                [1, 3, 1]
            ],
            values=[4, 1, 7, 9, 3, 4., 4],
            dense_shape=[2, 6, 2])
    }
    # 方式:1
    feature_cache = feature_column_lib.FeatureTransformationCache(features=features)
    rs_1 = column.get_sequence_dense_tensor(transformation_cache=feature_cache, state_manager=None)
    # 方式:2
    rs_2 = tf.contrib.feature_column.sequence_input_layer(features,column2)
    builder = fc._LazyBuilder(features)
    # 方式:3
    rs_3 =  column2._get_sequence_dense_tensor(builder,None)
    with tf.Session() as sess:
        print(sess.run(rs_1))
        print("111"*20)
        print(sess.run(rs_2))
        print("222"*20)
        print(sess.run(rs_3))

sequence_numeric_column()

3、说明

input_layer的输入要求:

All items should be instances of classes derived from
`_DenseColumn` such as `numeric_column`, `embedding_column`,
`bucketized_column`, `indicator_column`. If you have categorical features,
you can wrap them with an `embedding_column` or `indicator_column`.

简单说就是input_layer的输入要求是dense稠密数据

二、feature_column的介绍

1、feature_column是啥

tf.feature_column是一套处理数据的工具,我一般把它用做TensorFlow内的“特征工程”。

2、能做哪些数据处理

非sequence(非序列)固定长度的连续实数特征

sequence(序列)固定长度的连续实数特征(缺失值会用设置的默认值替代)

对于int型、string型分类特征:可以做成数值表示的特征、multi_hot特征、加权multi_hot特征、embedding特征、加权后的embedding特征。(适用于sequence和非sequence)

对于int型分类特征还可以做成one_hot特征。仅适用于非sequence。

还可以做int型、string型分类特征之间的交叉特征,以及share embedding特征

3、可以处理固定长度的连续实数(int或者float)特征

3.1、数据举例

  • 非序列(非sequence)的特征数据样式,必须为稠密tensor:

“fea_1”:0.123

“fea_2”:[0.123,0.222]

"fea_3":[1,3,5]

"fea_4":10

"fea_0":[ [[1, 2], [3, 4], [5, 6]], [[7, 8], [9, 10], [11, 12]] ]

  • 序列(sequence)的特征数据样式,必须为sparse tensor

"fea_sparse_1" : tf.SparseTensor( # indices要按顺序写 indices=[ [0, 0, 1], [0, 1, 0], [0, 5, 0], [0, 5, 1], [1, 2, 1], [1, 3, 0], [1, 3, 1] ], values=[4, 1, 7, 9, 3, 4., 4], dense_shape=[2, 6, 2])

3.2、可以利用normalizer_fn方法对输入的数据进行处理

normalizer_fn=lambda x: x/2

3.3、非序列&#x

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值