我正在寻找一个热编码字符串张量作为我的数据集管道的一部分。在我看来,这可以通过使用TextVectorization获得字符串张量的整数表示,然后使用one_hot进行转换来实现编码的2d张量。
当我使用TextVectorization时,它似乎会自动尝试将"“映射到0,将词汇表中的字符串映射到1。
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']我可以理解为什么它是有用的,因为它可以处理下面张量中的最后两个值,而不会抛出错误并在过程中为它们创建一个特征。
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原生的解决方案来生成字符串张量的整数表示?
发布于 2021-05-20 04:42:42
如果要删除元素,则需要使用普通的for-loop对其进行过滤
data = ["b","b","c","b","a","potato",""]
possible_values = ["a","b","c"]
filtered_data = []
for item in data:
if item in possible_values:
filtered_data.append(item)
print(filtered_data)或使用列表理解时更短
data = ["b","b","c","b","a","potato",""]
possible_values = ["a","b","c"]
filtered_data = [x for x in data if x in possible_values]
print(filtered_data)所以所有这些都不需要任何特殊的函数。
https://stackoverflow.com/questions/67600983
复制相似问题