一、一些工具

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处理方式:1feature_cache = fc_v2.FeatureTransformationCache(features=features)rs_1 = column.get_dense_tensor(transformation_cache=feature_cache, state_manager=None)# feature_column处理方式:2net = tf.feature_column.input_layer(features,column)# feature_column处理方式:3builder = 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])}# 方式:1feature_cache = feature_column_lib.FeatureTransformationCache(features=features)rs_1 = column.get_sequence_dense_tensor(transformation_cache=feature_cache, state_manager=None)# 方式:2rs_2 = tf.contrib.feature_column.sequence_input_layer(features,column2)builder = fc._LazyBuilder(features)# 方式:3rs_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、非序列(非sequence)特征feature_column的写法

# numeric_column只支持int和float类型
tf.feature_column.numeric_column(key="fea_1",shape=(1,),default_value=0,dtype=tf.float32,normalizer_fn=lambda x: ...)
tf.feature_column.numeric_column(key="fea_2",shape=(2,),default_value=0,dtype=tf.float32,normalizer_fn=lambda x: ...)
tf.feature_column.numeric_column(key="fea_3",shape=(3,),default_value=0,dtype=tf.int64,normalizer_fn=lambda x: ...)

3.4、固定长度实数特征的使用技巧

对于fea_1、fea_2、fea_3、fea_4特征,可以将其放在一起作为"fea_num",这样生成的tfrecord包含的key将会减少,从而占用空间会减少。

3.5、序列(sequence)特征feature_column的写法

column = tf.feature_column.sequence_numeric_column(key="feature",shape=(6,),default_value=60,dtype=tf.float32,normalizer_fn=lambda x: x / 2)
# 适用于 tf.contrib.feature_column.sequence_input_layer
column2 = tf.contrib.feature_column.sequence_numeric_column(key="feature",shape=(6,),default_value=60,dtype=tf.float32,normalizer_fn=lambda x: x / 2)
# 输入稀疏特征"fea_sparse_1"
# 结果:
TensorSequenceLengthPair(dense_tensor=array([[[60. ,  2. ,  0.5, 60. , 60. , 60. ],[60. , 60. , 60. , 60. ,  3.5,  4.5]],[[60. , 60. , 60. , 60. , 60. ,  1.5],[ 2. ,  2. , 60. , 60. , 60. , 60. ]]], dtype=float32), sequence_length=array([6, 4], dtype=int64))

4、可以处理离散特征类别特征(CategoricalColumn)

4.1、可以处理的非sequence和sequence序列特征数据(int型,string型)举例

# 3个2行2列的数据
"fea_5":[[["value1", "value2"], ["value3", "value3"]],[["value3", "value5"], ["value4", "value4"]],[["value4", "value5"], ["value2", "value4"]]
]
# 下面两个都是2个1维数据
"fea_6":["value1","value2"]
"fea_7":[["value1"],["value2"]]
# 1个1维数据
"fea_8":["value1"]
# 2个1行两列的数据
"fea_9":[["value1","value3"],["value2","value4"]]
# 2个2行2列的数据
"fea_10":[[["value1", "value2"], ["value3", "value3"]],[["value3", "value5"], ["value4", "value4"]]]
# 3个2行3列的稠密数据
"fea_11":[[[1, 2, 3], [4, 5, 6]],[[5, 6, 7], [8, 9, 10]],[[8, 9, 10], [11, 12, 13]]]
# 3个1行6列的稠密数据
"fea_12":[[1, 2, 3, 4, 5, 6],[5, 6, 7, 8, 9, 10],[8, 9, 10, 11, 12, 13]]
# 分类特征取值对应权重数据(对应的数据最好和权重的维度保持一致,且最多是2个维度)
"fea_weight_1":[[1.1, 2.2, 3.3, 4.4, 5.5, 6.6],[9.9, 8.8, 7.7, 6.6, 5.5, 4.4]]
# 权重数据3个1行4列数据
"fea_weight_2":[[1.1, 2.2, 3.3, 4.4],[9.9, 8.8, 7.7, 6.6],[3.4, 8.8, 2.2, 6.6]]
# 3个1行4列特征分类特征数据
"fea_13":[["value1", "value2","value3", "value3"],["value3", "value5","value4", "value4"],["value4", "value5","value2", "value4"]]
# 2个3行2列的特征数据
"fea_14":[[[1, 2], [3, 4], [5, 6]],[[7, 7], [9, 10], [11, 12]]]
int型数据同上

4.2、特征取值类别少使用:categorical_column_with_vocabulary_list

使用的四种方式:

  • 将类别特征、序列类别特征表示为整数数字
  • 将类别特征、序列类别特征表示为multi_hot编码
  • 将类别特征、序列类别特征表示为加权multi_hot编码
  • 将类别特征表、序列类别特征示为embedding向量表示

注意:对于稠密densor特征其输入数据维度必须保持一致

  • 对于非序列(非sequence)的特征数据的处理结果样式:
# 类别取值为int类型
column = tf.feature_column.categorical_column_with_vocabulary_list(key="feature",vocabulary_list=[1, 2, 3, 4],dtype=tf.int64,default_value=-1,# 作用同default_value,但是两者不能同时起作用。# 将超出的取值映射到[len(vocabulary), len(vocabulary) + num_oov_buckets)内# 默认取值为0# 当该值不为0时,default_value必须设置为-1# 当default_value和num_oov_buckets都取默认值时,会被映射为-1num_oov_buckets=4)# 类别取值为string类型
column = tf.feature_column.categorical_column_with_vocabulary_list(key="feature",vocabulary_list=["value1", "value2", "value3","value4"],dtype=tf.string,default_value=-1,num_oov_buckets=4)
# 输入数据fea_5后转换的稀疏tensor张量结果:
SparseTensorValue(indices=array([[0, 0, 0],[0, 0, 1],[0, 1, 0],[0, 1, 1],[1, 0, 0],[1, 0, 1],[1, 1, 0],[1, 1, 1],[2, 0, 0],[2, 0, 1],[2, 1, 0],[2, 1, 1]], dtype=int64), values=array([0, 1, 2, 2, 2, 6, 3, 3, 3, 6, 1, 3], dtype=int64), dense_shape=array([3, 2, 2], dtype=int64))
# 使用方式:1
# 转换为数值表示的稠密dense tensor结果:
[[[0 1][2 2]][[2 6][3 3]][[3 6][1 3]]]
# 使用方式:2
# 转换为multi_hot特征的结果(8列=vocabulary_list长度+num_oov_buckets):
[[[1. 1. 0. 0. 0. 0. 0. 0.][0. 0. 2. 0. 0. 0. 0. 0.]][[0. 0. 1. 0. 0. 0. 1. 0.][0. 0. 0. 2. 0. 0. 0. 0.]][[0. 0. 0. 1. 0. 0. 1. 0.][0. 1. 0. 1. 0. 0. 0. 0.]]]
# 使用方式:3
# 转换为embedding特征的结果(3列是自己设置的embedding的维度):
[[[-0.36440656  0.1924808   0.1217252 ]  # 表征数据整体 ["value1", "value2"][ 0.71263236 -0.45157978 -0.3456324 ]]    # 表征数据整体 ["value3", "value3"][[-0.18493024 -0.20456922 -0.3947454 ]    # 表征数据整体 ["value3", "value5"][-0.19874108  0.6833139  -0.56441975]]    # 表征数据整体 ["value4", "value4"][[-0.64061695  0.3628776  -0.50413907]    # 表征数据整体 ["value4", "value5"][-0.28863966  0.14901578  0.16483489]]]    # 表征数据整体 ["value2", "value4"]# 注意:
# 使用input_layer时"fea_5"不可用而"fea_9"可用,好像是不支持维度太高的# 输入数据:"fea_weight_2" 和 "fea_13" 后的加权特征结果(方式4、5):
# 使用方式:4
# 稠密的densor数值特征特征没用,有用的是embedding特征及加权的multi_hot特征:
IdWeightPair(id_tensor=SparseTensorValue(indices=array([[0, 0],[0, 1],[0, 2],[0, 3],[1, 0],[1, 1],[1, 2],[1, 3],[2, 0],[2, 1],[2, 2],[2, 3]], dtype=int64), values=array([0, 1, 2, 2, 2, 6, 3, 3, 3, 6, 1, 3], dtype=int64), dense_shape=array([3, 4], dtype=int64)), weight_tensor=SparseTensorValue(indices=array([[0, 0],[0, 1],[0, 2],[0, 3],[1, 0],[1, 1],[1, 2],[1, 3],[2, 0],[2, 1],[2, 2],[2, 3]], dtype=int64), values=array([1.1, 2.2, 3.3, 4.4, 9.9, 8.8, 7.7, 6.6, 3.4, 8.8, 2.2, 6.6],dtype=float32), dense_shape=array([3, 4], dtype=int64)))
[[ 1.1       2.2       7.7       0.        0.        0.        0.0.      ][ 0.        0.        9.9      14.299999  0.        0.        8.80.      ][ 0.        2.2       0.       10.        0.        0.        8.80.      ]]
# 使用方式:5
# 加权的embedding
[[ 0.16342753 -0.07898534 -0.33816564  0.2438156 ][ 0.04507026  0.30109608  0.08584949  0.28742552][ 0.00048126  0.315775    0.1192891   0.21302155]]
  • 对于序列特征数据sequence特征的处理结果样式:
column = tf.feature_column.sequence_categorical_column_with_vocabulary_list(key="feature",vocabulary_list=["value1", "value2", "value3"],dtype=tf.string,default_value=-1,num_oov_buckets=2)
# 输入序列特征"fea_10"后的稀疏tensor结果:
SparseTensorValue(indices=array([[0, 0, 0],[0, 0, 1],[0, 1, 0],[0, 1, 1],[1, 0, 0],[1, 0, 1],[1, 1, 0],[1, 1, 1]], dtype=int64), values=array([0, 1, 2, 2, 2, 3, 3, 3], dtype=int64), dense_shape=array([2, 2, 2], dtype=int64))
# 使用方式:1
# 转换为整数序列表示
[[[0 1][2 2]][[2 3][3 3]]]
# 使用方式:2
# 转换为multi_hot表示(维度为5=vocabulary_list+num_oov_buckets)
(array([[[1., 1., 0., 0., 0.],[0., 0., 2., 0., 0.]],[[0., 0., 1., 1., 0.],[0., 0., 0., 2., 0.]]], dtype=float32), array([2, 2], dtype=int64))
# 使用方式:3
# 转换为embedding表示(维度为自己设置:3)
(array([[[ 0.54921925,  0.039222  , -0.20265868], # 表示 ["value1", "value2"][ 0.3889632 ,  0.43282962, -0.2105029 ]], # 表示 ["value3", "value3"][[ 0.20231032, -0.11117572, -0.14481466],    # 表示 ["value3", "value5"][ 0.01565746, -0.65518105, -0.07912641]]    # 表示 ["value4", "value4"]
], dtype=float32), array([2, 2], dtype=int64))
# 注意使用input_layer时使用的是下面这个api:
# tf.contrib.feature_column.sequence_input_layer
# 这个api可以处理非sequence(非序列特征)的input_layer不能处理的"fea_5"特征

4.3、类别特征可取值范围中等时使用categorical_column_with_vocabulary_file

使用的三种方式:

  • 将类别特征、序列类别特征表示为整数数字
  • 将类别特征、序列类别特征表示为multi_hot编码
  • 将类别特征、序列类别特征表示为加权multi_hot编码
  • 将类别特征表、序列类别特征示为embedding向量表示

同4.2若输入是稠密densor其输入特征必须维度一致:

  • 对于非序列(非sequence)的特征数据的处理结果样式:

同4.2、categorical_column_with_vocabulary_list

column = tf.feature_column.categorical_column_with_vocabulary_file(key="feature",vocabulary_file="valuelist",dtype=tf.string,default_value=None,num_oov_buckets=3)
# 注意:
# 在使用input_layer时同样不能处理"fea_5"这样的多维特征数据
#
# 文件valuelist的内容如下:
value1
value2
value3
  • 对于序列特征数据sequence特征的处理结果样式:

同4.2、categorical_column_with_vocabulary_list

column = tf.feature_column.sequence_categorical_column_with_vocabulary_file(key="feature",vocabulary_file="valuelist",dtype=tf.string,default_value=None,num_oov_buckets=3)
# 结果及注意事项同4.2的序列sequence一样

4.3、对于int整型特征数据作为分类特征categorical_column_with_identity

使用的四种方式:

  • 将类别特征、序列类别特征表示为整数数字
  • 将类别特征、序列类别特征表示为multi_hot编码
  • 将类别特征、序列类别特征表示为加权multi_hot编码
  • 将类别特征表、序列类别特征示为embedding向量表示

同4.2若输入是稠密densor(int型)其输入特征维度必须保持一致

  • 对于非序列(非sequence)特征的处理结果样例:
column = tf.feature_column.categorical_column_with_identity(key='feature',# 取值范围为[0, num_buckets)num_buckets=10,# 数据不在[0, num_buckets)内时,将被映射的值。# 默认为None,这种情况下,当存在未知数据,会报错。# 要求default_value的取值在[0, num_buckets)内default_value=3)
# 结果及注意内容同4.2完全一样
  • 对于序列(sequence)特征的处理结果样例:
column = tf.feature_column.sequence_categorical_column_with_identity(key='feature',num_buckets=10,default_value=3)
# 结果及注意同4.2完全一样

4.4、对于string或者int型数据作为分类特征取值太多的情况:categorical_column_with_hash_bucket

使用的三种方式:

  • 将类别特征、序列类别特征表示为整数数字
  • 将类别特征、序列类别特征表示为multi_hot编码
  • 将类别特征、序列类别特征表示为加权multi_hot编码
  • 将类别特征表、序列类别特征示为embedding向量表示

同4.2、若输入是稠密densor数据其输入特征维度必须保持一致

  • 对于非序列(非sequence)特征的处理结果样例:
# string类型
column = tf.feature_column.categorical_column_with_hash_bucket(key="feature",# hash的空间大小hash_bucket_size=10,# 只支持string和integer# 数值类型也是进行hash映射dtype=tf.string)
# int类型
column = tf.feature_column.categorical_column_with_hash_bucket(key="feature",hash_bucket_size=10,dtype=tf.int64)
# 结果和注意内容同4.2完全一样
  • 对于序列(sequence)特征的处理结果样例:
# 处理string类型
column = tf.feature_column.sequence_categorical_column_with_hash_bucket(key="feature",hash_bucket_size=10,dtype=tf.string)
# 处理int类型
column = tf.feature_column.sequence_categorical_column_with_hash_bucket(key="feature",hash_bucket_size=10,dtype=tf.int64)
# 结果和注意 同4.2完全一样

4.5、对于string或int特征交叉特征的处理crossed_column

使用的四种方式:

  • 将类别特征、序列类别特征表示为整数数字
  • 将类别特征、序列类别特征表示为multi_hot编码
  • 将类别特征、序列类别特征表示为加权multi_hot编码
  • 将类别特征表、序列类别特征示为embedding向量表示

同4.2、若输入是稠密densor数据其输入特征维度必须保持一致

# keys为原始输入特征数据时:
column = tf.feature_column.crossed_column(# keys的类型还可以为CategoricalColumn(hash类型的category不行)keys=["fea_9", "fea_12"],hash_bucket_size=100,hash_key=None)
# keys为非hash类型的category类别特征时:
column_voc = tf.feature_column.categorical_column_with_vocabulary_file(key="fea_9",vocabulary_file="valuelist",dtype=tf.string,default_value=None,num_oov_buckets=3)
column_iden = tf.feature_column.categorical_column_with_identity(key='fea_12',num_buckets=10,default_value=3)
column_cro = tf.feature_column.crossed_column(keys=[column_voc,column_iden],hash_bucket_size=10,hash_key=None)
# 结果和注意同4.2的非序列(非sequence)完全一样

4.5、对于int型特征按取值边界进行分桶one_hot的特征处理bucketized_column

使用的方式:

  • 将类别特征、序列类别特征表示为one_hot编码

输入为稠密特征densor

numeric_column = tf.feature_column.numeric_column(key="feature",shape=6,default_value=0,dtype=tf.float32)
column = tf.feature_column.bucketized_column(# 1-D的numeric columnsource_column=numeric_column,# 要求列表为升序boundaries=[3, 5, 7, 10])
# 输入为"fea_14"数值特征
# 结果为
# 输出方式:1
# 使用input_layer的方式的输出
[[1. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 1. 0.0. 0. 0. 1. 0. 0.][0. 0. 0. 1. 0. 0. 0. 0. 1. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0.1. 0. 0. 0. 0. 1.]]
# 输出方式:2
# get_dense_tensor的方式的输出
[[[[1. 0. 0. 0. 0.][1. 0. 0. 0. 0.]][[0. 1. 0. 0. 0.][0. 1. 0. 0. 0.]][[0. 0. 1. 0. 0.][0. 0. 1. 0. 0.]]][[[0. 0. 0. 1. 0.][0. 0. 0. 1. 0.]][[0. 0. 0. 1. 0.][0. 0. 0. 0. 1.]][[0. 0. 0. 0. 1.][0. 0. 0. 0. 1.]]]]

5、multi_hot、one_hot、embedding、share_embedding的用法举例

5.1、multi_hot特征制作方法:indicator_column

column : categorical_column_with_vocabulary_listsequence_categorical_column_with_vocabulary_listcategorical_column_with_vocabulary_filesequence_categorical_column_with_vocabulary_filecategorical_column_with_identitysequence_categorical_column_with_identitycategorical_column_with_hash_bucketsequence_categorical_column_with_hash_bucketcrossed_columnweighted_categorical_columntf.feature_column.indicator_column(column)

5.2、embedding特征制作方法:embedding_column

column : categorical_column_with_vocabulary_listsequence_categorical_column_with_vocabulary_listcategorical_column_with_vocabulary_filesequence_categorical_column_with_vocabulary_filecategorical_column_with_identitysequence_categorical_column_with_identitycategorical_column_with_hash_bucketsequence_categorical_column_with_hash_bucketcrossed_columnweighted_categorical_columntf.feature_column.embedding_column(column)

5.3、one_hot特征制作方法:bucketized_column

numeric_column = tf.feature_column.numeric_column(key="feature",shape=6,default_value=0,dtype=tf.float32)
column = tf.feature_column.bucketized_column(# 1-D的numeric columnsource_column=numeric_column,# 要求列表为升序boundaries=[3, 5, 7, 10])

5.4、share_embedding特征制作方法:shared_embeddings

column : categorical_column_with_vocabulary_listsequence_categorical_column_with_vocabulary_listcategorical_column_with_vocabulary_filesequence_categorical_column_with_vocabulary_filecategorical_column_with_identitysequence_categorical_column_with_identitycategorical_column_with_hash_bucketsequence_categorical_column_with_hash_bucketcrossed_columnweighted_categorical_columntf.feature_column.shared_embeddings(column,column)

6、变长特征及定长特征

feature_schema = {# featureA: 一维字符串特征,可用于分类特征(可加权):categorical_column_with*"featureA": tf.io.FixedLenFeature(shape=(1,), dtype=tf.string, default_value="null"),# featureB: 一维数值特征,可用于实数特征:numeric_column"featureB": tf.io.FixedLenFeature(shape=(1,), dtype=tf.float32, default_value=0.0),# featureC: 三维字符串特征,可用于分类特征(可加权):categorical_column_with*"featureC": tf.io.FixedLenFeature(shape=(3,), dtype=tf.string, default_value=["null", "null", "null"]),# featureD: 二维数值特征,可用于实数特征:numeric_column"featureD": tf.io.FixedLenFeature(shape=(2,), dtype=tf.int64, default_value=[0, 0]),# featureE: 不固定维度字符串特征可用于分类特征(可加权):categorical_column_with*"featureE": tf.io.VarLenFeature(dtype=tf.string),# featureF: 不固定维度数值特征"featureF": tf.io.VarLenFeature(dtype=tf.float32),# featureG: 二维字符串序列特征"featureG": tf.io.FixedLenSequenceFeature(shape=(2,), dtype=tf.string, allow_missing=True, default_value=None),# featureH: 三维数值序列特征"featureH": tf.io.FixedLenSequenceFeature(shape=(3,), dtype=tf.int64, allow_missing=True, default_value=None),# featureI: 21 * 4 * 10 维字符串稀疏特征"featureI": tf.io.SparseFeature(index_key=["featureI_Index0", "featureI_Index1", "featureI_Index2"],value_key="featureI_value", dtype=tf.string, size=[21, 4, 10], already_sorted=False)
}

7、一些问题及说明

在TensorFlow1.x中:

  • from tensorflow.python.feature_column import feature_column as fc
  • from tensorflow.python.feature_column import feature_column_v2 as fc_v2
  • fc_v2.FeatureTransformationCache 方法用来缓存输入的数据(densor或者sparse densor)
  • column.get_dense_tensor(transformation_cache=feature_cache, state_manager=None)对应于FeatureTransformationCache中的缓存数据,其中column类型为:tf.feature_column.numeric_column
  • fc._LazyBuilder方法也是用来缓存输入的数据(densor或者sparse densor)
  • column._get_dense_tensor(builder,None)对应于_LazyBuilder中的缓存数据,其中column类型为:tf.feature_column.numeric_column
  • tf.feature_column.input_layer方法直接将输入数据和feature_column作为输入并进行转换,其中feature_column类型为:tf.feature_column.numeric_column
  • column2._get_sequence_dense_tensor(builder,None),其中column2类型为:tf.contrib.feature_column.sequence_numeric_column,builder为:_LazyBuilder
  • column.get_sequence_dense_tensor(feature_cache, None),其中column类型为:tf.feature_column.sequence_numeric_column,feature_catch为:FeatureTransformationCache
  • tf.contrib.feature_column.sequence_input_layer(features,column2)其中column2类型为:tf.contrib.feature_column.sequence_numeric_column
  • fc_v2._StateManagerImpl(layer=tf.keras.layers.Layer(), trainable=True)用来创建生成embedding特征的权重
  • weigthed_col_emb.create_state(state_manager) 其中state_manager就是_StateManagerImpl,weigthed_col_emb为:tf.feature_column.embedding_column
  • rs_w_3 = weigthed_col_emb.get_dense_tensor(feature_weight_cache,state_manager),feature_weight_cache为FeatureTransformationCache,state_manager为_StateManagerImpl
  • 输出特征值(densor或者sparse densor)的方法如下:
with tf.Session() as sess:sess.run(tf.global_variables_initializer())sess.run(tf.tables_initializer())print(sess.run(rs_1))print(rs_1.eval())print(tf.sparse_tensor_to_dense(rs_2.id_tensor,-1).eval())

TensorFlow系列——feature_column特征工具说明相关推荐

  1. [Pytorch系列-42]:工具集 - torchvision常见预训练模型的下载地址

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

  2. TensorFlow 系列案例(3): 使用TensorFlow DNN分类器对数据进行分类

    TensorFlow 卷积神经网络系列案例(1):猫狗识别 https://blog.csdn.net/duan_zhihua/article/details/81156693 TensorFlow ...

  3. Tensorflow系列 | Tensorboard详解(下篇)

    编辑 | 安可 [导读]:本文接续Tensorboard详解(上篇)介绍Tensorboard和总结Tensorboard的所有功能并有代码演练.欢迎大家点击上方蓝字关注我们的公众号:深度学习与计算机 ...

  4. 特征工程系列:特征筛选的原理与实现(下)

    0x00 前言 我们在<特征工程系列:特征筛选的原理与实现(上)>中介绍了特征选择的分类,并详细介绍了过滤式特征筛选的原理与实现.本篇继续介绍封装式和嵌入式特征筛选的原理与实现. 0x01 ...

  5. C#进阶系列——WebApi 接口测试工具:WebApiTestClient

    正文 前言:这两天在整WebApi的服务,由于调用方是Android客户端,Android开发人员也不懂C#语法,API里面的接口也不能直接给他们看,没办法,只有整个详细一点的文档呗.由于接口个数有点 ...

  6. 【TensorFlow系列一】TensorFlow工作原理

    ↑ 点击上方[计算机视觉联盟]关注我们 今天开始,小编会更新TensorFlow系列文章,包括TensorFlow的使用和TensorFlow实践的项目等. 本篇主要介绍TensorFlow的计算模型 ...

  7. ​特征工程系列:特征预处理(上)

    特征工程系列:特征预处理(上) 关于作者:JunLiang,一个热爱挖掘的数据从业者,勤学好问.动手达人,期待与大家一起交流探讨机器学习相关内容~ 0x00 前言 数据和特征决定了机器学习的上限,而模 ...

  8. 特征工程系列:特征预处理(下)

    特征工程系列:特征预处理(下) 本文为数据茶水间群友原创,经授权在本公众号发表. 关于作者:JunLiang,一个热爱挖掘的数据从业者,勤学好问.动手达人,期待与大家一起交流探讨机器学习相关内容~ 0 ...

  9. iOS系列开发-版本控制工具Git的使用

    iOS系列开发-版本控制工具Git的使用 作为一个开发者,与团队之间默契的配合是很重要的,我们所写的代码在无论是在公司还是在个人来说都是一份不可随意丢弃的东西,但是如果只是单纯的开发,我们很难做到今天 ...

最新文章

  1. Scrum 学习笔记
  2. Java 数据类型缓存池
  3. 韦东山u-boot、kernel打补丁操作
  4. 非常有用的并发控制-循环栅栏CyclicBarrier
  5. html代码js正则,过滤所有HTML代码和CSS,JS
  6. 基于Python+Django+Mysql的蔬菜水果在线购物商城
  7. DevExpress ActiveX
  8. 存储过程清理N天前数据
  9. DNS知识:解决DNS中MX与cname冲突问题 DNS拉平 cname智能加速
  10. 微信小程序底部导航栏未读消息出现小红点的实现
  11. 应用程序正常初始化(0xc000007b)失败,请单击“确定”,终止应用程序的问题处理
  12. iPhone删除的照片能恢复吗?苹果手机照片怎么恢复
  13. 从零开始搭建terraria(泰拉瑞亚)服务器
  14. 梁武帝萧衍之代齐建梁行贿亡国,南北朝梁国之鉴!
  15. 《设计模式之禅》中23种设计模式demo汇总
  16. 【计算机视觉】边缘检测
  17. rust 局域网联机_Steam上有哪些值得推荐的可以多人局域网联机的游戏?
  18. 移动硬盘安装ubuntu16.04
  19. 『重磅』免费无限量下载知网/万方/维普等数据库文献的正规渠道
  20. aws s3 静态网站_如何使用AWS S3,CloudFront和命令行管理静态网站

热门文章

  1. Leet code链表相关题目初探
  2. python有vlookup的功能么,vlookup函数功能非常强大,那在Python中如何实现?
  3. jenkins集成jmeter
  4. 杰理之linein为DAC进使用打断方式播放提示音,一直有linein背景音【篇】
  5. 如何在linux centos 环境下运行.exe文件
  6. 大连理工计算机科学与技术,学院概况-大连理工大学计算机科学与技术学院
  7. Processing编程入门-02——添加图片 小游戏
  8. 大学物理——质点运动学
  9. 街机游戏之王 公众号来了
  10. C#Base64简单加密与解密