參考:Convolutional Neural Networks for Text Classification
參考:【book】- Neural Network Methods for NLP
參考:自然語言處理中CNN模型幾種常見的Max Pooling操作
原圖:
簡單說明:
個人理解:
關於一維卷積神經網絡的具體實現過程全網說的比較隱晦,貌似默認大家都懂,但是之前一直沒看懂,按照自己的理解畫出下圖。
- filter 做點積再求和,每次只生成 1 個數字
- 整個數據走一遍,生成一個向量
- 每一個 filter 生成一個向量
- 組合在一起就是一個新的二維向量
對於 keras 實現 1D CNN 的說明
語法:
keras.layers.convolutional.Conv1D(filters, kernel_size, strides=1, padding='valid', dilation_rate=1, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)
說明:
-
filters:卷積核的數目(即輸出的維度),有幾個 filter,最終就是幾個維度(影響單詞向量維度)
-
kernel_size:整數或由單個整數構成的list/tuple,卷積核的空域或時域窗長度(影響文本長度的維度)
-
strides:整數或由單個整數構成的list/tuple,為卷積的步長。任何不為1的strides均與任何不為1的dilation_rate均不兼容
-
padding:補0策略,為“valid”, “same” 或“causal”,“causal”將產生因果(膨脹的)卷積,即output[t]不依賴於input[t+1:]。當對不能違反時間順序的時序信號建模時有用。參考WaveNet: A Generative Model for Raw Audio, section 2.1.。“valid”代表只進行有效的卷積,即對邊界數據不處理。“same”代表保留邊界處的卷積結果,通常會導致輸出shape與輸入shape相同。
-
activation:激活函數,為預定義的激活函數名(參考激活函數),或逐元素(element-wise)的Theano函數。如果不指定該參數,將不會使用任何激活函數(即使用線性激活函數:a(x)=x)
測試輸出維度:
>>> import numpy as np >>> words = np.zeros((20, 30, 40)) >>> import keras >>> out = keras.layers.Conv1D(33, 5)(words) >>> out.shape TensorShape([20, 26, 33])