admin管理员组

文章数量:1650771

1.作用

将sparse/categrical特征转化为dense 向量。one-hot产生的向量,易造成数据的稀疏化,对于推荐系统而言,大维度的稀疏数据对于结果的影响较大,因此我们考虑使用embedding_column,来对数据进行压缩。

输入:

categorical_column一个CategoricalColumn创建由categorical_column_with_*功能。此列产生稀疏的ID为输入给嵌入查找。
dimension一个整数,指定嵌入的尺寸,必须> 0。
combiner如何指定一个字符串,以减少是否有单排多个条目。目前,“mean”,“sqrtn”和“sum”的支持,以“sqrtn”的默认值。 “sqrtn”经常取得了较好的精度,特别是与袋的词列。此每一个都可以被认为是在列水平归一化。欲了解更多信息,请参见tf.embedding_lookup_sparse 。
initializer在嵌入变量初始化所使用的变量的初始化功能。如果未指定,默认为truncated_normal_initializer均值0.0和标准偏差1/sqrt(dimension) 。
ckpt_to_load_from字符串代表关卡名称/从中还原列权重模式。如果需要的话tensor_name_in_ckptNone 。
tensor_name_in_ckpt该名Tensorckpt_to_load_from从中恢复列权重。如果需要的话ckpt_to_load_fromNone 。
max_norm如果不是None ,嵌入值L2-归到这个值。
trainable无论嵌入是能够接受训练。默认为True。
use_safe_embedding_lookup如果为真,使用safe_embedding_lookup_sparse而不是embedding_lookup_sparse。 safe_embedding_lookup_sparse确保没有空行和所有的权重和IDS是在额外的计算成本为代价的正面。这仅适用于秩2(N×M个)形状的输入张量。默认为真,认为如果不需要上述检查关闭。注意,具有空行不会触发任何错误,虽然输出结果可能是0或省略。

输出:

每一个类别生成一个dense的向量。

2.例子

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 columns
columns = tf.feature_column.embedding_column(department, 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.53917825  0.12470714  0.36257058 -0.27178663  0.22339591 -0.07271086
   0.06099864  0.520078   -0.33505204 -0.11995942]
 [ 0.53917825  0.12470714  0.36257058 -0.27178663  0.22339591 -0.07271086
   0.06099864  0.520078   -0.33505204 -0.11995942]
 [ 0.02904907  0.47831646  0.32324752  0.48403072  0.26939172  0.38538367
  -0.03237799  0.07358446 -0.09673704 -0.45041117]
 [-0.26118422  0.36279836 -0.36552393  0.49025697 -0.34702778 -0.12992676
  -0.43512756  0.5454379  -0.3286348  -0.03985294]
 [ 0.02904907  0.47831646  0.32324752  0.48403072  0.26939172  0.38538367
  -0.03237799  0.07358446 -0.09673704 -0.45041117]]

3.thinking:跟tf.feature_column.shared_embedding_columns()函数有什么区别

官方文档给的解释:shared_embedding_columns跟embedding_column ,不同之处在于它产生嵌入共享相同的嵌入权重列的列表。怎么理解共享权重?欢迎留言~

 

参考:

1.官方文档:https://www.tensorflow/versions/r1.15/api_docs/python/tf/feature_column/embedding_column

本文标签: 函数TFtensorflowembeddingcolumnfeaturecolumn