使用 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