【发布时间】:2021-08-08 13:30:21
【问题描述】:
我正在寻找一个热编码字符串张量作为我的数据集管道的一部分。在我看来,这可以使用TextVectorization 来获得字符串张量的整数表示,然后使用one_hot 进行转换以实现编码的二维张量。
当我使用 TextVectorization 时,它似乎会自动尝试将“”映射到 0,并将词汇字符串中的字符串映射到 1。请参见下面使用 Tensorflow 2.3:
import tensorflow as tf
from tensorflow.keras import layers
possible_values = ["a","b","c"]
text_vectorization = layers.experimental.preprocessing.TextVectorization(output_sequence_length=1)
text_vectorization.set_vocabulary(possible_values)
print(text_vectorization.get_vocabulary())
['', '[UNK]', 'a', 'b', 'c']
我明白为什么它会很有用,因为它可以处理以下张量中的最后 2 个值,而不会引发错误并在此过程中为它们创建特征。
test_tensor = tf.constant(["b","b","c","b","a","potato",""])
print(text_vectorization.call(test_tensor))
tf.Tensor(
[[3]
[3]
[4]
[3]
[2]
[1]
[0]], shape=(7, 1), dtype=int64)
虽然我想在我的应用程序中关闭此行为,因为我不需要它。 The documentation 似乎没有提供禁用它的选项,现在我只是从输出中转到 -2 但这感觉不对。
有没有更简洁、原生的 tensorflow 解决方案来生成字符串张量的整数表示?
【问题讨论】:
-
您可以编写代码来创建没有这些元素的新列表 - 只需使用
for-loop 从列表中获取元素并检查if element in possible_values:。如果元素在possible_values中,则将其添加到新列表中。
标签: python encoding tensorflow2.0 one-hot-encoding