在深度學習中,大部分的資料長度都不是固定長度的

例如:"今天天氣真好","不知道今天天氣如何"等等

對於這樣的資料,除非我們所使用的 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,以便讓長度相同

結果如下圖:

Screenshot_1.png

而如果我們希望是從後面補 0,則需要多加一個參數 padding,讓此參數的值為 post

所以我們加上下面的程式碼

# pad sequence
# 後面補 0
padded = pad_sequences(sequences, padding='post')
print("================padding = post==================")
print(padded)

結果如下圖:

Screenshot_2.png

除了透過補 0,來讓資料長度固定

也可以嘗試透過刪除多餘的資料來讓資料長度固定

此時便可以利用設定 maxlen 參數來決定剩下多少長度,預設是刪除前面的資料

# truncate sequence
# 截斷固定長度,預設是截斷前面
truncated= pad_sequences(sequences, maxlen=2)
print("====truncate sequence truncating= pre====")
print(truncated)

結果如下:

Screenshot_3.png

當然也可以刪除後面的資料來讓資料長度固定

# truncate sequence
# 截斷固定長度,設定為截斷後面
truncated= pad_sequences(sequences, maxlen=2, truncating='post')
print("====truncate sequence truncating= pre====")
print(truncated)

結果如下:

Screenshot_4.png

arrow
arrow
    文章標籤
    Python padding truncating
    全站熱搜

    MingHsiangSu 發表在 痞客邦 留言(0) 人氣()