keras
只能接受长度相等的序列输入。当我们的数据集中出现了长度不等的序列时,可以使用pad_sequence()
函数将序列转化为经过填充以后得到的一个长度相同新的序列。
tf.keras.preprocessing.sequence.pad_sequences(
sequences,
maxlen=None,
dtype='int32',
padding='pre',
truncting='pre',
value=0)
sequences
:浮点数或整数构成的两层嵌套列表maxlen
:None或整数,为序列的最大长度。大于此长度的将被截断,小于此长度的序列将在后面填0.dtype
:返回的numpy array
的数据类型。padding
:pre
或post
,确定当需要补0时,在序列的起始还是结尾补。truncating
:pre
或post
,确定需要截断序列时,从起始还是结尾截断。value
:浮点数,用于填充序列。返回的是一个二维张量,其中序列长度均为maxlen
>>list_1 = [[2, 3, 4]]
>>tf.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)
imdb
数据集进行演示(train_data, train_labels), (test_data, test_labels) = tf.keras.dataset.imdb.load_data()
train_data = tf.keras.preprocessing.sequence.pad_sequence(train_data,maxlen=256, padding='post',value=0)
注意,imdb
数据集中,单词的索引是从1开始的,不是从0开始的(按照惯例,0不代表任何特定词,而用来编码任何未知的单词),所以可以使用0填充序列。imdb
数据集中序列长度最大为256.