在深度學習中,大部分的資料長度都不是固定長度的
例如:"今天天氣真好","不知道今天天氣如何"等等
對於這樣的資料,除非我們所使用的 model 能夠接受這樣不固定長度的資料
否則這樣的問題對於深度學習來說,會是個大問題
在 Python 的 Keras 套件中,我們可以透過 pad_sequences 嘗試來將資料變成相同長度
首先我們輸入下面的程式碼
from keras.preprocessing.sequence import pad_sequences
# define sequences
# 資料長度並不一樣長
sequences = [[1, 2, 3, 4], [1, 2, 3], [1] ]
# pad sequence
# 預設是前面補 0
# padded = pad_sequences(sequences, padding='pre')
padded = pad_sequences(sequences)
print("================padding = pre===================")
print(padded)
資料的長度分別為 4, 3, 1
在 padding 時,pad_sequences 函式預設是在前面補 0,以便讓長度相同
結果如下圖:
而如果我們希望是從後面補 0,則需要多加一個參數 padding,讓此參數的值為 post
所以我們加上下面的程式碼
# pad sequence
# 後面補 0
padded = pad_sequences(sequences, padding='post')
print("================padding = post==================")
print(padded)
結果如下圖:
除了透過補 0,來讓資料長度固定
也可以嘗試透過刪除多餘的資料來讓資料長度固定
此時便可以利用設定 maxlen 參數來決定剩下多少長度,預設是刪除前面的資料
# truncate sequence
# 截斷固定長度,預設是截斷前面
truncated= pad_sequences(sequences, maxlen=2)
print("====truncate sequence truncating= pre====")
print(truncated)
結果如下:
當然也可以刪除後面的資料來讓資料長度固定
# truncate sequence
# 截斷固定長度,設定為截斷後面
truncated= pad_sequences(sequences, maxlen=2, truncating='post')
print("====truncate sequence truncating= pre====")
print(truncated)
結果如下: