为什么Keras one-hot编码没有零?

c9x0cxw0  于 2023-01-13  发布在  其他
关注(0)|答案(1)|浏览(154)

例如:

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?

umuewwlo

umuewwlo1#

这是这个函数的工作方式。它产生整数而不是OHE。可能他们也因为不自然的用法而反对它。看起来tensorflow.keras.preprocessing.text.one_hot正在被反对。
已弃用:tf.keras.text.preprocessing.one_hot不对Tensor进行运算,不建议将其用于新代码。首选使用output_mode='one_hot'的tf.keras.layers.哈希,它通过接受tf.Tensor输入的层提供等效功能。有关预处理层的概述,请参阅预处理层指南。
建议用途:

tf.keras.layers.Hashing(
    num_bins,
    mask_value=None,
    salt=None,
    output_mode='int',
    sparse=False,
    **kwargs
)

如果您将output_mode从int修改为multi_hot,您将获得您正在寻找的独热向量。
来自文档:
层输出的规范。默认为“int”。值可以是“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索引在样本中出现的次数的计数。

相关问题