Keras.io.preprocessing.sequence.pad_sequences有什么作用?

Kof*_*man 33 python deep-learning keras

可以在这里改进Keras文档.阅读完本文后,我仍然不明白这是怎么回事:Keras.io.preprocessing.sequence.pad_sequences

有人可以阐明这个功能的作用,并且理想情况下提供一个例子吗?

osc*_*fri 47

pad_sequences用于确保列表中的所有序列具有相同的长度.默认情况下,这是通过0在每个序列的开头填充直到每个序列与最长序列具有相同的长度来完成的.

例如

>>> pad_sequences([[1, 2, 3], [3, 4, 5, 6], [7, 8]])
array([[0, 1, 2, 3],
       [3, 4, 5, 6],
       [0, 0, 7, 8]], dtype=int32)
Run Code Online (Sandbox Code Playgroud)

[3, 4, 5, 6]是最长的序列,因此0将填充到其他序列,以便它们的长度匹配[3, 4, 5, 6].

如果您想要填充到可以设置的序列的末尾padding='post'.

如果要指定每个序列的最大长度,可以使用maxlen参数.这将截断所有序列比maxlen.

>>> pad_sequences([[1, 2, 3], [3, 4, 5, 6], [7, 8]], maxlen=3)
array([[1, 2, 3],
       [4, 5, 6],
       [0, 7, 8]], dtype=int32)
Run Code Online (Sandbox Code Playgroud)

现在每个序列的长度为3.

  • @kasheemlew 根据[文档](https://keras.io/preprocessing/sequence/),您可以使用`pad_sequences` 的`truncating` 参数来控制它。默认情况下,`truncating` 设置为 `'pre'`,它会截断序列的开始部分。如果您想截断序列的结尾部分,您可以将其设置为“post”。 (2认同)

nie*_*tel 5

一些例子:

>>> from keras.preprocessing.sequence import pad_sequences
>>> a = [[1, 2, 3], [3, 4, 5, 6], [7, 8]]

>>> # add the 0's on the beginning of sequences
>>> pad_sequences(a)
array([[0, 1, 2, 3],
       [3, 4, 5, 6],
       [0, 0, 7, 8]])

>>> # add the 0's on the end of sequences
>>> pad_sequences(a, padding="post")
array([[1, 2, 3, 0],
       [3, 4, 5, 6],
       [7, 8, 0, 0]])

>>> # add a limit length of sequences
>>> pad_sequences(a, maxlen=3)
array([[1, 2, 3],
       [4, 5, 6],
       [0, 7, 8]])


>>> # add a limit length on the end of sequences
>>> pad_sequences(a, maxlen=3, padding="post")
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 0]])
Run Code Online (Sandbox Code Playgroud)