将sparse、categorical输入,转为dense column。这类似于embedding_column
,不同之处在于它产生嵌入共享相同的嵌入权重列的列表。在TensorFlow2.0中叫tf.feature_column.shared_embeddings()。
输入参数:
categorical_columns |
通过创建一个类别列的列表categorical_column_with_* 功能。这些列将产生稀疏的ID是输入嵌入查找。所有列都必须是同一类型的,并且具有相同的参数,除了key 。例如,他们可以categorical_column_with_vocabulary_file与同vocabulary_file。一些或所有列也可能是weighted_categorical_column。 |
dimension |
一个整数,指定嵌入的尺寸,必须> 0。 |
combiner |
如何指定一个字符串,以减少是否有单排多个条目。目前,“mean”,“sqrtn”和“sum”的支持,以“mean”的默认值。 “sqrtn”经常取得了较好的精度,特别是与针对输入为词的列。此每一个都可以被认为是在列水平归一化。欲了解更多信息,请参见 |
initializer |
在嵌入变量初始化所使用的变量的初始化功能。如果未指定,默认为truncated_normal_initializer 均值0.0 和标准偏差1/sqrt(dimension) 。 |
shared_embedding_collection_name |
这些列的可选总称。如果不给出一个合理的名称将根据名称来选择categorical_columns 。 |
ckpt_to_load_from |
字符串代表关卡名称/从中还原列权重模式。如果需要的话tensor_name_in_ckpt 不None 。 |
tensor_name_in_ckpt |
该名Tensor 在ckpt_to_load_from 从中恢复列权重。如果需要的话ckpt_to_load_from 不None 。 |
max_norm |
如果不是None ,如果它的L2范数大于这个值,结合之前各嵌入被裁剪。(避免参数embedding后的向量过大) |
trainable |
无论嵌入是能够接受训练。默认为True。 |
输出:
稠密列表,结果的顺序遵循的顺序categorical_columns
。
注意:
categorical_column_with_*的bucket_size跟
tf.feature_column.shared_embedding_columns()中的dimension没有之间关系,bucket_size是你对类别特征进行映射的大小;后者dimension是你要embedding的向量维度。
# -*- coding: utf-8 -*-
import tensorflow as tf
sess=tf.Session()
#特征数据
features = {
'department': ['sport', 'sport', 'drawing', 'gardening', 'travelling'],
}
#特征列
department = tf.feature_column.categorical_column_with_hash_bucket('department', 10, dtype=tf.string)
print "—————1—————"
print department
print "——————2————"
#组合特征列
columns = [department]
print columns
columns = tf.feature_column.shared_embedding_columns(columns, dimension=10)
#输入层(数据,特征列)
inputs = tf.feature_column.input_layer(features, columns)
#初始化并运行
init = tf.global_variables_initializer()
sess.run(tf.tables_initializer())
sess.run(init)
v=sess.run(inputs)
print(v)
输出
[[-0.05679376 0.30380946 -0.00690177 -0.0920149 -0.37978074 -0.03548807
0.03643319 0.01148186 0.08708773 0.19076113]
[-0.05679376 0.30380946 -0.00690177 -0.0920149 -0.37978074 -0.03548807
0.03643319 0.01148186 0.08708773 0.19076113]
[ 0.1966852 0.08005933 0.02070881 -0.04092572 -0.1450257 -0.34694198
-0.10393345 0.00058411 0.3635449 0.4857725 ]
[ 0.07504455 -0.06521942 0.06507228 0.17408054 -0.40250075 -0.01091835
0.35192814 -0.20619783 0.29015994 0.1381938 ]
[ 0.1966852 0.08005933 0.02070881 -0.04092572 -0.1450257 -0.34694198
-0.10393345 0.00058411 0.3635449 0.4857725 ]]
多个量共享embedding,维度变长,double增长,用途:同一个类型的变量,共享同一一个空间?待完善。
# -*- coding: utf-8 -*
import tensorflow as tf
sess = tf.Session()
# 特征数据
features = {
'department': ['sport', 'sport', 'drawing', 'gardening', 'travelling'],
'dddd': ['sport', 'sport', 'drawing', 'gardening', 'travelling'],
}
# 特征列
department = tf.feature_column.categorical_column_with_hash_bucket('department', 10, dtype=tf.string)
dd = []
dd.append(department)
dd.append(tf.feature_column.categorical_column_with_hash_bucket('dddd', 10, dtype=tf.string))
print "—————1—————"
print department
print "——————2————"
# 组合特征列
columns = dd
print columns
columns = tf.feature_column.shared_embedding_columns(columns, dimension=10)
# 输入层(数据,特征列)
inputs = tf.feature_column.input_layer(features, columns)
# 初始化并运行
init = tf.global_variables_initializer()
sess.run(tf.tables_initializer())
sess.run(init)
v = sess.run(inputs)
print(v)
输出:
[[ 0.09610736 -0.35665867 -0.46561095 0.08378798 0.24317417 0.2871368
0.04707814 0.41457146 0.15167095 0.23440133 0.09610736 -0.35665867
-0.46561095 0.08378798 0.24317417 0.2871368 0.04707814 0.41457146
0.15167095 0.23440133]
[ 0.09610736 -0.35665867 -0.46561095 0.08378798 0.24317417 0.2871368
0.04707814 0.41457146 0.15167095 0.23440133 0.09610736 -0.35665867
-0.46561095 0.08378798 0.24317417 0.2871368 0.04707814 0.41457146
0.15167095 0.23440133]
[ 0.06731322 0.24726458 -0.07253622 -0.51096314 0.4155461 0.25300828
0.04620391 0.48813507 0.31652704 0.21498448 0.06731322 0.24726458
-0.07253622 -0.51096314 0.4155461 0.25300828 0.04620391 0.48813507
0.31652704 0.21498448]
[ 0.25455624 -0.15391532 -0.05924602 -0.51533717 -0.05295704 0.30715698
0.02884303 0.11610222 -0.08384481 0.40862226 0.25455624 -0.15391532
-0.05924602 -0.51533717 -0.05295704 0.30715698 0.02884303 0.11610222
-0.08384481 0.40862226]
[ 0.06731322 0.24726458 -0.07253622 -0.51096314 0.4155461 0.25300828
0.04620391 0.48813507 0.31652704 0.21498448 0.06731322 0.24726458
-0.07253622 -0.51096314 0.4155461 0.25300828 0.04620391 0.48813507
0.31652704 0.21498448]]
参考:
1.官方文档:https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/feature_column/shared_embedding_columns