【TensorFlow】(三)tf.feature_column.shared_embedding_columns()函数的用法

1.作用

将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”经常取得了较好的精度,特别是与针对输入为词的列。此每一个都可以被认为是在列水平归一化。欲了解更多信息,请参见tf.embedding_lookup_sparse 。

initializer 在嵌入变量初始化所使用的变量的初始化功能。如果未指定,默认为truncated_normal_initializer均值0.0和标准偏差1/sqrt(dimension) 。
shared_embedding_collection_name 这些列的可选总称。如果不给出一个合理的名称将根据名称来选择categorical_columns 。
ckpt_to_load_from 字符串代表关卡名称/从中还原列权重模式。如果需要的话tensor_name_in_ckptNone 。
tensor_name_in_ckpt 该名Tensorckpt_to_load_from从中恢复列权重。如果需要的话ckpt_to_load_fromNone 。
max_norm 如果不是None ,如果它的L2范数大于这个值,结合之前各嵌入被裁剪。(避免参数embedding后的向量过大)
trainable 无论嵌入是能够接受训练。默认为True。

输出:

稠密列表,结果的顺序遵循的顺序categorical_columns 。

2.例子

注意:

  1. tf.feature_column.shared_embedding_columns()函数的输入是对类别特征进行hash或者one-hot之后的list。
  2. 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

你可能感兴趣的:(TensorFlow,tensorflow)