1. 序列預處理
-
TimeseriesGenerator
-
用於生成批量時序數據的實用工具類。這個類以一系列由相等間隔以及一些時間序列參數(例如步長、歷史長度等)匯集的數據點作為輸入,以生成用於訓練/驗證的批次數據。
from keras.preprocessing.sequence import TimeseriesGenerator import numpy as np data = np.array([[i] for i in range(50)]) # 時間步 targets = np.array([[i] for i in range(50)]) # 對應於data的時間步的目標值 data_gen = TimeseriesGenerator(data, targets, length=10, sampling_rate=2, batch_size=2) assert len(data_gen) == 20 batch_0 = data_gen[0] x, y = batch_0 assert np.array_equal(x, np.array([[[0], [2], [4], [6], [8]], [[1], [3], [5], [7], [9]]])) assert np.array_equal(y, np.array([[10], [11]]))
-
-
pad_sequences
- 將多個序列截斷或補齊為相同長度。該函數將一個
num_samples
的序列(整數列表)轉化為一個 2D Numpy 矩陣,其尺寸為(num_samples, num_timesteps)
。num_timesteps
要么是給定的maxlen
參數,要么是最長序列的長度。 - 比
num_timesteps
短的序列將在末端以value
值補齊。向前補齊為默認操作。 - 比
num_timesteps
長的序列將會被截斷以滿足所需要的長度。補齊或截斷發生的位置分別由參數pading
和truncating
決定。
- 將多個序列截斷或補齊為相同長度。該函數將一個
-
skipgrams
- 生成 skipgram 詞對。該函數將一個單詞索引序列(整數列表)轉化為以下形式的單詞元組:
- (單詞, 同窗口的單詞),標簽為 1(正樣本)。
- (單詞, 來自詞匯表的隨機單詞),標簽為 0(負樣本)。
- 生成 skipgram 詞對。該函數將一個單詞索引序列(整數列表)轉化為以下形式的單詞元組:
-
make_sampling_table
-
生成一個基於單詞的概率采樣表。用來生成
skipgrams
的sampling_table
參數。sampling_table[i]
是數據集中第 i 個最常見詞的采樣概率(出於平衡考慮,出現更頻繁的詞應該被更少地采樣)。 -
采樣概率根據 word2vec 中使用的采樣分布生成:
p(word) = (min(1, sqrt(word_frequency / sampling_factor) / (word_frequency / sampling_factor))) # 我們假設單詞頻率遵循 Zipf 定律(s=1),來導出 frequency(rank) 的數值近似: frequency(rank) ~ 1/(rank * (log(rank) + gamma) + 1/2 - 1/(12*rank)) # 其中 gamma 為 Euler-Mascheroni 常量。
-
2. 文本預處理
- Tokenizer
- 文本標記實用類。該類允許使用兩種方法向量化一個文本語料庫: 將每個文本轉化為一個整數序列(每個整數都是詞典中標記的索引); 或者將其轉化為一個向量,其中每個標記的系數可以是二進制值、詞頻、TF-IDF權重等。
- 默認情況下,刪除所有標點符號,將文本轉換為空格分隔的單詞序列(單詞可能包含
'
字符)。 這些序列然后被分割成標記列表。然后它們將被索引或向量化。0
不會被分配給任何單詞的保留索引。
- hashing_trick
- 將文本轉換為固定大小散列空間中的索引序列。由於哈希函數可能發生沖突,可能會將兩個或更多字分配給同一索引。 碰撞的概率與散列空間的維度和不同對象的數量有關。
- one_hot
- One-hot 將文本編碼為大小為 n 的單詞索引列表。
- text_to_word_sequence
- 將文本轉換為單詞(或標記)的序列。
3. 圖像預處理
-
ImageDataGenerator 類:通過實時數據增強生成張量圖像數據批次。數據將不斷循環(按批次)。
-
使用
.flow(x, y)
的例子:(x_train, y_train), (x_test, y_test) = cifar10.load_data() y_train = np_utils.to_categorical(y_train, num_classes) # 對y_train的每個元素進行one-hot編碼 y_test = np_utils.to_categorical(y_test, num_classes) datagen = ImageDataGenerator( featurewise_center=True, # 將輸入數據的均值設置為 0,逐特征進行(像素矩陣?) featurewise_std_normalization=True, # 將輸入除以數據標准差,逐特征進行。 rotation_range=20, # 整數。隨機旋轉的度數范圍。(圖片旋轉?) width_shift_range=0.2, # 浮點數、一維數組或整數 (width伸縮?) height_shift_range=0.2, # 浮點數、一維數組或整數 (height伸縮?) horizontal_flip=True) # 布爾值。將圖片執行隨機水平翻轉。 # 計算特征歸一化所需的數量 # (如果應用 ZCA 白化,將計算標准差,均值,主成分)# ZCA 白化 ? 協方差矩陣?用再查! datagen.fit(x_train) # 做了上述ImageDataGenerator中涉及的圖像增強 # 使用實時數據增益的批數據對模型進行擬合: model.fit_generator(datagen.flow(x_train, y_train, batch_size=32), steps_per_epoch=len(x_train) / 32, epochs=epochs) # 這里有一個更 「手動」的例子 for e in range(epochs): print('Epoch', e) batches = 0 for x_batch, y_batch in datagen.flow(x_train, y_train, batch_size=32): model.fit(x_batch, y_batch) batches += 1 if batches >= len(x_train) / 32: # 我們需要手動打破循環, # 因為生成器會無限循環 break
-
使用
.flow_from_directory(directory)
的例子:train_datagen = ImageDataGenerator( rescale=1./255, # 顧名思義:尺寸放縮 shear_range=0.2, # 剪切 zoom_range=0.2, # 縮放 horizontal_flip=True) # 水平翻轉 test_datagen = ImageDataGenerator(rescale=1./255) train_generator = train_datagen.flow_from_directory( 'data/train', target_size=(150, 150), batch_size=32, class_mode='binary') validation_generator = test_datagen.flow_from_directory( 'data/validation', target_size=(150, 150), batch_size=32, class_mode='binary') model.fit_generator( train_generator, steps_per_epoch=2000, epochs=50, validation_data=validation_generator, validation_steps=800)
-
同時轉換圖像和蒙版 (mask) 的例子。
# 創建兩個相同參數的實例 data_gen_args = dict(featurewise_center=True, featurewise_std_normalization=True, rotation_range=90., width_shift_range=0.1, height_shift_range=0.1, zoom_range=0.2) image_datagen = ImageDataGenerator(**data_gen_args) mask_datagen = ImageDataGenerator(**data_gen_args) # 為 fit 和 flow 函數提供相同的種子和關鍵字參數 seed = 1 image_datagen.fit(images, augment=True, seed=seed) mask_datagen.fit(masks, augment=True, seed=seed) image_generator = image_datagen.flow_from_directory( 'data/images', class_mode=None, seed=seed) mask_generator = mask_datagen.flow_from_directory( 'data/masks', class_mode=None, seed=seed) # 將生成器組合成一個產生圖像和蒙版(mask)的生成器 train_generator = zip(image_generator, mask_generator) model.fit_generator( train_generator, steps_per_epoch=2000, epochs=50)
-
ImageDataGenerator 類方法:
- apply_transform
- 根據給定的參數將變換應用於圖像。
- fit
- 將數據生成器用於某些示例數據。它基於一組樣本數據,計算與數據轉換相關的內部數據統計。當且僅當
featurewise_center
或featurewise_std_normalization
或zca_whitening
設置為 True 時才需要。
- 將數據生成器用於某些示例數據。它基於一組樣本數據,計算與數據轉換相關的內部數據統計。當且僅當
- flow
- 采集數據和標簽數組,生成批量增強數據。
- flow_from_directory
- get_random_transform
- 為轉換生成隨機參數。
- random_transform
- 將隨機變換應用於圖像。
- standardize
- 將標准化配置應用於一批輸入。
- apply_transform