tf.layers.conv1d函式解析(一維卷積)
阿新 • • 發佈:2018-11-23
一維卷積一般用於處理文字,所以輸入一般是一段長文字,就是詞的列表
函式定義如下:
tf.layers.conv1d( inputs, filters, kernel_size, strides=1, padding='valid', data_format='channels_last', dilation_rate=1, activation=None, use_bias=True, kernel_initializer=None, bias_initializer=tf.zeros_initializer(), kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None, trainable=True, name=None, reuse=None )
比較重要的幾個引數是inputs, filters, kernel_size,下面分別說明
inputs : 輸入tensor, 維度(None, a, b) 是一個三維的tensor
None : 一般是填充樣本的個數,batch_size
a : 句子中的詞數或者字數
b : 字或者詞的向量維度
filters : 過濾器的個數
kernel_size : 卷積核的大小,卷積核其實應該是一個二維的,這裡只需要指定一維,是因為卷積核的第二維與輸入的詞向量維度是一致的,因為對於句子而言,卷積的移動方向只能是沿著詞的方向,即只能在列維度移動
一個例子:
inputs = tf.placeholder('float', shape=[None, 6, 8])
out = tf.layers.conv1d(inputs, 5, 3)
說明: 對於一個樣本而言,句子長度為6個字,字向量的維度為8
filters=5, kernel_size=3, 所以卷積核的維度為3*8
那麼輸入6*8經過3*8的卷積核卷積後得到的是4*1的一個向量(4=6-3+1)
又因為有5個過濾器,所以是得到5個4*1的向量
畫圖如下: