当使用一个热编码时,为什么需要pad\u序列?

2024-05-14 10:46:51 发布

您现在位置:Python中文网/ 问答频道 /正文

在Keras中,我可以有以下代码:

docs                                                                                                                                                                                                                                                                                                                                                                
Out[9]: 
['Well done!',
 'Good work',
 'Great effort',
 'nice work',
 'Excellent!',
 'Weak',
 'Poor effort!',
 'not good',
 'poor work',
 'Could have done better.']

labels = array([1,1,1,1,1,0,0,0,0,0]) 
voc_size = 50
encoded = [one_hot(d, voc_size) for d in docs] 
max_length = 4 
padded_docs = pad_sequences(encoded, maxlen=max_length, padding='post')  

我的理解是,“one\u hot”编码已经根据词汇表大小为每个文档创建了相等的长度。那么为什么每个医生都需要重新填充呢

编辑:更多说明的另一个示例:

单热编码是将分类变量(如cat、dog、rat)表示为二进制向量(如[1,0,0]、[0,1,0]、[0,0,1])

所以在这种情况下,猫,狗和老鼠被编码为相等长度的向量。这与上面的例子有何不同


Tags: 代码docs编码sizevocone向量length
1条回答
网友
1楼 · 发布于 2024-05-14 10:46:51

TLDRone_hot使每个索引来自一个固定的范围,而不是使结果列表具有固定的长度

为了理解这个问题,我们需要理解^{}函数实际上做了什么。它将文档转换成一系列int索引,这些索引的长度与文档中的字数(标记)大致相同。例如:

'one hot encoding' -> [0, 2, 17]

其中每个索引都是词汇表中单词的索引(例如one有索引0)。这意味着,当您将one_hot应用于一系列文本(如您提供的代码中)时,您将获得列表索引列表,其中每个列表可能具有不同的长度。这对于kerasnumpy来说是个问题,它们希望列表的列表是类似于的数组形式,这意味着每个子列表应该具有相等的固定长度

这是通过pad_sequences函数实现的,该函数使每个子列表具有固定的长度

相关问题 更多 >

    热门问题