如何在Tensorflow(TF-Ranking)中使用feature_column v2

时间:2019-09-08 23:14:20

标签: tensorflow

我正在使用TF-Ranking训练推荐引擎。我遇到了一个问题,该问题似乎是与tf.feature_column API有关的版本不兼容问题。

我的问题的简短版本是:什么是v2功能专栏(TF 2.0?)(例如,请参见this),如何确保我将功能专栏视为v2?仍使用TF 1.14。

这是详细信息:

我无法充分缩短代码长度以提供可重复的示例。但我将尝试用语言来描述问题。

TF版本:1.14 操作系统:Ubuntu 18.04

最初,我的模型中有两个特征useritem,它们都是稀疏的分类特征,它们包装在自己的tf.feature_column.embedding_column中。我能够使用train_and_evaluate的{​​{1}}方法并导出用于投放的模型。

然后,我添加了一个新功能Estimator,该功能仅在预测过程中存在(作为上下文功能)。这与curr_item共享嵌入。所以现在我有了一个item,它同时包裹了tf.feature_column.shared_embedding_columnsitem

现在调用current_item会导致以下错误(短信缩短):

  

ValueError:无法从检查点加载所有请求的变量。请确保您的model_fn不期望未保存在检查点中的变量。   在检查点中找不到关键的input_layer / user_embedding / embedding_weights

请注意,调用train_and_evaluate方法只能正常工作。我的理解是,一旦进行评估,它将尝试从检查点加载变量,但是该变量不存在。我做了一些调试,发现了原因:

在训练过程中调用train时(依次调用encode_listwise_features),所有功能(encode_featuresuser)均为“ V2”(不确定这意味着什么)因此以下if语句成立:

https://github.com/tensorflow/ranking/blob/31fc134816cc4974a46a11e7bb2df0066d0a88f0/tensorflow_ranking/python/feature.py#L92

和两个变量都以item前缀(作用域名称?)命名:

  

encoding_layer / user_embedding / embedding_weights   encoding_layer / item_embedding / embedding_weights

但是,当我为所有三个功能调用相同的功能时(在eval或预测模式下有点困惑),其中一些不是“ V2”,我们最终处于上述条件的其他部分,即encoding_layer直接使用,变量使用input_layer前缀命名。现在TF正在尝试还原

  

input_layer / user_embedding / embedding_weights

从检查点开始,但该名称在检查点中不存在,因为它被称为

  

encoding_layer / user_embedding / embedding_weights

在训练中。

所以:

1)如何确保在所有阶段将我的所有功能都视为v2?我尝试使用input_layer,但没有帮助。在上面的if语句中已经有一个ToDo注释。 2)是否可以修改tf.compat.v2.feature_column以避免这种情况?例如引发异常并提供有用的消息?

0 个答案:

没有答案
相关问题