例如:
from tensorflow.keras.preprocessing.text import one_hot
vocab_size = 5
one_hot('good job', vocab_size)
Out[6]: [3, 2]
对于每个单词,它只分配一个整数'3'和'2',而不是一个大小为5的带有1和0的向量?单热编码应该总是产生1和0的向量吗?
这个函数是这样工作的。它产生整数而不是OHE。可能他们也因为不自然的用法而弃用它。似乎tensorflow.keras.preprocessing.text.one_hot
被弃用了。
弃用:tf.keras.text.preprocessing。One_hot不操作不建议在新代码中使用。更喜欢使用output_mode='one_hot'进行哈希等效的功能通过一个接受tf的层。张量输入。有关的概述,请参阅预处理层指南预处理层。
建议使用:
tf.keras.layers.Hashing(
num_bins,
mask_value=None,
salt=None,
output_mode='int',
sparse=False,
**kwargs
)
如果您将output_mode从int
修改为multi_hot
,您将获得您正在寻找的单热向量。
来自文档:
层输出规范。默认为" intquot;。值可以是"int", "one_hot", "multi_hot"或"count"配置层如下:
"int": Return the integer bin indices directly. "one_hot": Encodes each individual element in the input into an array the same size as num_bins, containing a 1 at the input's bin
索引。如果最后一个维度的大小为1,将在该维度上进行编码。如果最后一个维度的大小不是1,则为追加一个新维度编码后的输出。multi_hot:将输入中的每个样本编码为与num_bins大小相同的单个数组,每个bin索引索引包含一个1存在于样品中。将最后一个维度作为样本如果输入形状为(…), sample_length),输出形状将(……num_tokens)。"count":作为"multi_hot",但int数组包含bin索引在示例中出现的次数的计数。