1. 數據處理
keras的數據處理都在Keras.preprocessing這個庫裏面,有text、sequence和image三個子庫。
文字的預處理叫做標註(Tokenize)
(1)文字拆分。text_to_word_sequence函數,中文的話第三方組件做分詞,例如結巴分詞 pip3 install jieba
(2)建立索引。統一的序號和字詞對應,集合,形成字典。或者用onr_hot來編碼。索引的建立和自己選取的維度會造成哈希碰撞或者稀疏矩陣的問題
(3)序列補齊(Padding)。矩陣的長寬所限,寬度不夠的句子肯定要補齊。還有一種補齊的方式是用類似tcp滑動窗口的形式的形式,主要是針對一定順序的單詞(K)拆分成連續的子串(M),K非常大。一般用pad_sequences函數
(4)轉換爲矩陣。上面序列補齊的pad_sequences就是喲中矩陣化的方式。對於大量的文本用Keras提供的標註類Tokenizer來處理
(5)使用標註類批量處理文本文件。參考(4)
序列數據預處理
對於時間序列和上面的處理方式一致,不論是補齊還是截斷,都是將其相鄰的連續N個元素連在一起,即跟自然語言處理中的N元語法(N-Gram)模型類似,還有一個對序列數據做跳躍語法處理的(SkipGram)模型,代表是著名的word2vec。
圖像數據的處理
Keras.preprocessing.image.ImageDataGenerator類。這個類生成一個數據生成器(Generator)對象,圖像的矩陣數據就那麼個結構
2. Keras模型
分兩類:序列模型(Sequential)和通用模型(Model),他們之間的拓撲結構不同
eg:比如在Keras手冊中就舉了一個教神經網絡看視頻進行自然語言問答的例子。在這個例子中,輸入數據有兩種:一是視頻圖像;二是自然語言的提問。首先通過構造多層卷積神經網絡使用序列模型來對圖像編碼,然後將這個模型放入TimeDistributed函數中建立視頻編碼,最後使用LSTM對編碼建模,同時對自然語言也進行從文字到向量的轉換,在合併兩個網絡以後,將合併的網絡作爲參數輸入下一個全連接層進行計算,並輸出可能的回答。