1. 程式人生 > >tensorflow之神經網路層:AveragePooling1D、average_pooling1d、Conv1D和conv1d

tensorflow之神經網路層:AveragePooling1D、average_pooling1d、Conv1D和conv1d

1.tf.layers.AveragePooling1D

Class AveragePooling1D:對一維的輸入作平均池化

引數:

  1. pool_size:一個整數或者一個單個整數的tuple/list,表示池化視窗的大小
  2. Strides:一個整數或者一個單個整數的tuple/list,指定池化操作的移動步幅
  3. padding:一個字串。padding的方法:”valid”或者’same’
  4. data_format:一個字串,channels_last(預設)或channels_first中的一個,輸入中維度的排序,channels_last對應於具有形狀(batch, length, channels)的輸入,而channels_first對應於具有形狀(batch, channels, length)的輸入。
  5. Name:一個字串,表示層的名稱。

程式碼示例:

import tensorflow as tf

x=tf.Variable(tf.random_normal([2,10,1])) #2表示batch_size,10表示輸入向量長度,1表示輸入的channel數量

init=tf.global_variables_initializer()

average_pool=tf.layers.AveragePooling1D(pool_size=2,strides=2,padding='SAME',activity_regularizer=tf.nn.l2_normalize)

y=average_pool(x)

print(y.shape) #(2, 5, 1)

print(average_pool.activity_regularizer) #<function l2_normalize at 0x000001F04CA3B730>

print(average_pool.dtype) #float32

print(average_pool.data_format) #channels_last

with tf.Session() as sess:

    sess.run(init)

    print(sess.run(y))

    print(sess.run(x))

2.tf.layers.average_pooling1d

作用跟AveragePooling1D類一樣。

tf.layers.average_pooling1d(

    inputs,

    pool_size,

    strides,

    padding='valid',

    data_format='channels_last',

    name=None

)

x=tf.Variable(tf.random_normal([2,10,1]))

x_average_pool=tf.layers.average_pooling1d(x,pool_size=2,padding="SAME",strides=2)

print(x_average_pool.shape)(2, 5, 1)

3.tf.layers.Conv1D

Class Conv1D:一維的卷積層,如時間卷積

該層建立一個卷積核,卷積核與層輸入進行卷積(實際上是交叉相關)以產生輸出張量。如果use_bias為True(並且提供了bias_initializer),則會建立偏置向量並將其新增到輸出。最後,如果啟用函式不為None,它也會作用於輸出。

引數:

filters:整數,輸出空間的維度。例如,卷積中卷積核的數量。

Kernel_size:一個整數或一個單個整數的tuple/list,指定一維卷積視窗的長度

Strides:一個整數或一個單個整數的tuple/list,指定卷積的步幅。指定任何!=1的步幅值與指定任何dilation_rate值!=1不相容

Padding:”valid”或者”same”

data_format:一個字串,channels_last(預設)或channels_first中的一個,輸入中維度的排序,channels_last對應於具有形狀(batch, length, channels)的輸入,而channels_first對應於具有形狀(batch, channels, length)的輸入。

dilation_rate:一個整數或一個單個整數的tuple/list,指定用於擴張的卷積的擴張率。指定任何!=1的步幅值與指定任何dilation_rate值!=1不相容

activation:啟用函式,將其設定為None則是線性函式

use_bias:Boolean,表示是否使用偏置

kernel_initializer:卷積核的初始化器

bias_initializer:偏置向量的初始化器,如果為None,則使用預設的初始化器

kernel_regularizer:用於卷積核的可選正則化器。

bias_regularizer:用於偏置向量的可選正則化器。

activity_regularizer:用於輸出的可選正則化函式

kernel_constraint:在由優化器更新之後應用於核心的可選投影函式(例如,用於實現層權重的範數約束或值約束)。 該函式必須將未投影的變數作為輸入,並且必須返回投影變數(必須具有相同的形狀)。 在進行非同步分散式訓練時,使用約束是不安全的。

bias_constraint:可選的投影功能,在優化器進行更新後應用於偏差。

trainable:Boolean,如果為Ture將變數新增到圖集合GraphKeys.TRAINABLE_VARIABLES中。

程式碼示例:

import tensorflow as tf

x=tf.Variable(tf.random_normal([2,10,1])) #2表示batch_size,10表示輸入向量長度,1表示輸入的channel數量

conv1D=tf.layers.Conv1D(10,kernel_size=2,strides=1,padding="SAME")#輸出10個filters

print(conv1D(x))

conv1D=tf.layers.Conv1D(10,kernel_size=2,strides=1)

print(conv1D(x))

輸出:

Tensor("conv1d_10/BiasAdd:0", shape=(2, 10, 10), dtype=float32)

Tensor("conv1d_11/BiasAdd:0", shape=(2, 9, 10), dtype=float32)

4.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

)

引數說明:

name:層的名稱。

reuse:Boolean,是否以同一名稱重用前一層的權重。

其它引數同Conv1D類。

conv1D=tf.layers.conv1d(x,filters=10,kernel_size=2,strides=1,padding="SAME")

print(conv1D)

conv1D=tf.layers.conv1d(x,filters=10,kernel_size=2,strides=1)

print(conv1D)

輸出:

Tensor("conv1d_15/BiasAdd:0", shape=(2, 10, 10), dtype=float32)

Tensor("conv1d_16/BiasAdd:0", shape=(2, 9, 10), dtype=float32)