使用 Tensorflow 嵌入列会引发 All feature_columns must be _FeatureColumn instances 错误

Posted

技术标签:

【中文标题】使用 Tensorflow 嵌入列会引发 All feature_columns must be _FeatureColumn instances 错误【英文标题】:Using Tensorflow embedded columns raises All feature_columns must be _FeatureColumn instances error 【发布时间】:2020-04-19 14:17:44 【问题描述】:

我是 tensorflow 的新手,我正在尝试遵循我遇到的官方文档 tf.feature_column.categorical_column_with_vocabulary_list

我测试的代码是:

key='colors', vocabulary_list=('X', 'R', 'G', 'B', 'Y'), default_value=0)
columns = [[tfc.embedding_column(colors, 3)], ...]
features = tf.io.parse_example(..., features=tfc.make_parse_example_spec(columns))
dense_tensor = tfc.input_layer(features, columns)

但是,当我运行此示例代码时,我收到以下错误: ValueError:所有 feature_columns 必须是 _FeatureColumn 实例。给定:[EmbeddingColumn(categorical_column=VocabularyListCategoricalColumn(key='colors', words_list=('X', 'R', 'G', 'B', 'Y'), dtype=tf.string, default_value=0, num_oov_buckets =0), dimension=3, combiner='mean', initializer=, ckpt_to_load_from=None, tensor_name_in_ckpt=None, max_norm=None, trainable=True)]

我做错了什么?

【问题讨论】:

嗨@Wha,你能提供一个最小的可重现代码吗?或者您可以粘贴所有产生错误的代码吗? 【参考方案1】:

make_parse_example_spec 期望 FeatureColumn instances。您可以使用以下方法为类别列表创建 FeatureColumn 实例。

colors = feature_column.categorical_column_with_vocabulary_list(key='colors',vocabulary_lis=('R', 'G', 'B', 'Y'),num_oov_buckets=2)
my_feature_columns = [feature_column.indicator_column(colors)]
feature_column.make_parse_example_spec(my_feature_columns)

输出:

'colors': VarLenFeature(dtype=tf.string)  

如果你想在你的分类列上创建一个密集的嵌入张量,你可以按照下面的例子。

data = 'colors': ['X', 'R', 'G', 'B', 'Y']

df = pd.DataFrame(data)

colors = feature_column.categorical_column_with_vocabulary_list('colors', df['colors'].unique())

colors_embedding = feature_column.embedding_column(colors, dimension=4)

dense_tensor = tf.keras.layers.DenseFeatures(colors_embedding)(data)

结果:

tf.Tensor(
[[ 0.17071894  0.29407692 -0.26661882  0.07768019]
 [ 0.26196313  0.14372464 -0.41102907 -0.7207164 ]
 [-0.7888006  -0.07049363 -0.49007863  0.45744416]
 [ 0.56329435 -0.7051675   0.04742934 -0.69377   ]
 [-0.52031726  0.488502   -0.37031132 -0.44338205]], shape=(5, 4), dtype=float32)

【讨论】:

以上是关于使用 Tensorflow 嵌入列会引发 All feature_columns must be _FeatureColumn instances 错误的主要内容,如果未能解决你的问题,请参考以下文章

将运行时 7.3LTS(Spark3.0.1) 升级到 9.1LTS(Spark3.1.2) 后创建 PySpark 数据帧 Databricks 时,json 文件中的重复列会引发错误

请求tensorflow = float64_ref,actual = float64

使用 GPU 无法在 tensorflow 教程中运行词嵌入示例

TensorFlow 嵌入查找

使用 tensorflow 实现嵌入层

如何在 scikit 学习模型中使用 Tensorflow 嵌入?