在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])
所以在这种情况下,猫,狗和老鼠被编码为相等长度的向量。这与上面的例子有何不同
TLDR
one_hot
使每个索引来自一个固定的范围,而不是使结果列表具有固定的长度为了理解这个问题,我们需要理解^{} 函数实际上做了什么。它将文档转换成一系列
int
索引,这些索引的长度与文档中的字数(标记)大致相同。例如:其中每个索引都是词汇表中单词的索引(例如
one
有索引0
)。这意味着,当您将one_hot
应用于一系列文本(如您提供的代码中)时,您将获得列表索引列表,其中每个列表可能具有不同的长度。这对于keras
和numpy
来说是个问题,它们希望列表的列表是类似于的数组形式,这意味着每个子列表应该具有相等的固定长度这是通过
pad_sequences
函数实现的,该函数使每个子列表具有固定的长度相关问题 更多 >
编程相关推荐