tf.feature_column.shared_embedding_columns
是 TensorFlow 中用于创建共享相同嵌入权重的嵌入列列表的函数。这个功能特别适用于当你有多个稀疏输入且它们是同一类型(例如观看视频ID和印象视频ID共享相同的词汇表),并且你希望将它们转换为密集表示(例如,输入到深度神经网络DNN)时使用。
函数定义
tf.feature_column.shared_embedding_columns
的定义如下:
tf.feature_column.shared_embedding_columns(
categorical_columns,
dimension,
combiner='mean',
initializer=None,
shared_embedding_collection_name=None,
ckpt_to_load_from=None,
tensor_name_in_ckpt=None,
max_norm=None,
trainable=True,
use_safe_embedding_lookup=True
)
-
categorical_columns
:一个由categorical_column_*
函数创建的分类列的列表。这些列必须全部属于同一类型并具有相同的参数,除了key
。例如,它们可以是具有相同词汇文件的categorical_column_with_vocabulary_file
。部分或全部列也可以是weighted_categorical_column
。 -
dimension
:嵌入向量的维度。 -
combiner
:多个向量组合的方式,默认为 'mean'。 -
initializer
:嵌入矩阵的初始化器,默认为tf.truncated_normal_initializer
。 -
ckpt_to_load_from
和tensor_name_in_ckpt
:用于从checkpoint文件中加载预训练的嵌入矩阵。 -
max_norm
:如果设置,则使用L2归一化。 -
trainable
:是否允许嵌入权重被训练。 -
use_safe_embedding_lookup
:是否使用安全的嵌入查找。
使用示例
以下是一个使用 shared_embedding_columns
的示例:
watched_video_id = tf.feature_column.categorical_column_with_vocabulary_file(
'watched_video_id', video_vocabulary_file, video_vocabulary_size)
impression_video_id = tf.feature_column.categorical_column_with_vocabulary_file(
'impression_video_id', video_vocabulary_file, video_vocabulary_size)
columns = tf.feature_column.shared_embedding_columns(
[watched_video_id, impression_video_id], dimension=10)
estimator = tf.estimator.DNNClassifier(feature_columns=columns, ...)
在这个例子中,watched_video_id
和 impression_video_id
共享相同的词汇表文件,并且它们将共享相同的嵌入权重。这些嵌入权重可以用于深度学习模型,如DNNClassifier。
注意事项
- 确保所有输入的分类列都是同一类型并且具有相同的参数,除了
key
。 - 如果使用预训练的嵌入矩阵,确保提供正确的checkpoint路径和张量名称。
- 嵌入权重可以被训练,也可以设置为不可训练,这取决于你的模型需求。
这个函数是构建深度学习模型中特征工程的重要工具,特别是在处理具有相同语义的多个稀疏特征时。