0. 前言
为了实现的简便,keras只能接受长度相同的序列输入。因此如果目前序列长度参差不齐,这时需要使用pad_sequences()。该函数是将序列转化为经过填充以后的一个长度相同的新序列新序列。
1. 语法
官方语法如下: Code.1.1 pad_sequences语法
代码语言:javascript复制keras.preprocessing.sequence.pad_sequences(sequences,
maxlen=None,
dtype='int32',
padding='pre',
truncating='pre',
value=0.)
1.1 参数说明
sequences
:浮点数或整数构成的两层嵌套列表maxlen
:None或整数,为序列的最大长度。大于此长度的序列将被截短,小于此长度的序列将在后部填0.dtype
:返回的numpy array的数据类型padding
:‘pre’或‘post’,确定当需要补0时,在序列的起始还是结尾补`truncating
:‘pre’或‘post’,确定当需要截断序列时,从起始还是结尾截断value
:浮点数,此值将在填充时代替默认的填充值0
1.2 返回值
返回的是个2维张量,长度为maxlen
2. 实例
Code.2.1 简单示例
代码语言:javascript复制>>>list_1 = [[2,3,4]]
>>>keras.preprocessing.sequence.pad_sequences(list_1, maxlen=10)
array([[0, 0, 0, 0, 0, 0, 0, 2, 3, 4]], dtype=int32)
>>>list_2 = [[1,2,3,4,5]]
>>>keras.preprocessing.sequence.pad_sequences(list_2, maxlen=10)
array([[0, 0, 0, 0, 0, 1, 2, 3, 4, 5]], dtype=int32)
在自然语言中一般和分词器一起使用,在分词器笔记中也提到过pad_sequences
使用效果,原文见
python函数——Keras分词器Tokenizer
Code.2.2 常用示例
代码语言:javascript复制>>>tokenizer.texts_to_sequences(["下 雨 我 加班"])
[[4, 5, 6, 7]]
>>>keras.preprocessing.sequence.pad_sequences(tokenizer.texts_to_sequences(["下 雨 我 加班"]), maxlen=20)
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 7]],dtype=int32)
- https://keras-cn.readthedocs.io/en/latest/preprocessing/sequence/