1. 程式人生 > >tf.layers.conv1d函式解析(一維卷積)

tf.layers.conv1d函式解析(一維卷積)

一維卷積一般用於處理文字,所以輸入一般是一段長文字,就是詞的列表

 

函式定義如下:

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的向量

畫圖如下: