當前位置:
首頁 > 最新 > 一看就懂的Tensorflow實戰

一看就懂的Tensorflow實戰

Tensorflow卷積神經網路實現

導入數據集

參數設置

定義CNN模型

補充:tf.nn,tf.layers, tf.contrib模塊區別[1]

tf.nn,tf.layers, tf.contrib模塊有很多功能是重複的,尤其是卷積操作,在使用的時候,我們可以根據需要現在不同的模塊。但有些時候可以一起混用。

下面是對三個模塊的簡述:

補充:TensorFlow layers模塊[2]

Convolution

Convolution 有多個方法,如 conv1d()、conv2d()、conv3d(),分別代表一維、二維、三維卷積,另外還有 conv2d_transpose()、conv3d_transpose(),分別代表二維和三維反卷積,還有 separable_conv2d() 方法代表二維深度可分離卷積。它們定義在 tensorflow/python/layers/convolutional.py 中,其用法都是類似的,在這裡以 conv2d() 方法為例進行說明。

參數說明如下:

inputs:必需,即需要進行操作的輸入數據。

filters:必需,是一個數字,代表了輸出通道的個數,即 output_channels。

kernel_size:必需,卷積核大小,必須是一個數字(高和寬都是此數字)或者長度為 2 的列表(分別代表高、寬)。

strides:可選,默認為 (1, 1),卷積步長,必須是一個數字(高和寬都是此數字)或者長度為 2 的列表(分別代表高、寬)。

padding:可選,默認為 valid,padding 的模式,有 valid 和 same 兩種,大小寫不區分。

data_format:可選,默認 channels_last,分為 channels_last 和 channels_first 兩種模式,代表了輸入數據的維度類型,如果是 channels_last,那麼輸入數據的 shape 為 (batch, height, width, channels),如果是 channels_first,那麼輸入數據的 shape 為 (batch, channels, height, width)。

dilation_rate:可選,默認為 (1, 1),卷積的擴張率,如當擴張率為 2 時,卷積核內部就會有邊距,3×3 的卷積核就會變成 5×5。

activation:可選,默認為 None,如果為 None 則是線性激活。

use_bias:可選,默認為 True,是否使用偏置。

kernel_initializer:可選,默認為 None,即權重的初始化方法,如果為 None,則使用默認的 Xavier 初始化方法。

bias_initializer:可選,默認為零值初始化,即偏置的初始化方法。

kernel_regularizer:可選,默認為 None,施加在權重上的正則項。

bias_regularizer:可選,默認為 None,施加在偏置上的正則項。

activity_regularizer:可選,默認為 None,施加在輸出上的正則項。

kernel_constraint,可選,默認為 None,施加在權重上的約束項。

bias_constraint,可選,默認為 None,施加在偏置上的約束項。

trainable:可選,默認為 True,布爾類型,如果為 True,則將變數添加到 GraphKeys.TRAINABLE_VARIABLES 中。

name:可選,默認為 None,卷積層的名稱。

reuse:可選,默認為 None,布爾類型,如果為 True,那麼如果 name 相同時,會重複利用。

返回值: 卷積後的 Tensor。

注意,這裡只需要給出輸入數據,輸出通道數,卷積核大小即可。

Pooling

layers 模塊提供了多個池化方法,這幾個池化方法都是類似的,包括 max_pooling1d()、max_pooling2d()、max_pooling3d()、average_pooling1d()、average_pooling2d()、average_pooling3d(),分別代表一維二維三維最大和平均池化方法,它們都定義在 tensorflow/python/layers/pooling.py 中,這裡以 > max_pooling2d() 方法為例進行介紹。

參數說明如下:

inputs: 必需,即需要池化的輸入對象,必須是 4 維的。

pool_size:必需,池化窗口大小,必須是一個數字(高和寬都是此數字)或者長度為 2 的列表(分別代表高、寬)。

strides:必需,池化步長,必須是一個數字(高和寬都是此數字)或者長度為 2 的列表(分別代表高、寬)。

padding:可選,默認 valid,padding 的方法,valid 或者 same,大小寫不區分。

data_format:可選,默認 channels_last,分為 channels_last 和 channels_first 兩種模式,代表了輸入數據的維度類型,如果是 channels_last,那麼輸入數據的 shape 為 (batch, height, width, channels),如果是 channels_first,那麼輸入數據的 shape 為 (batch, channels, height, width)。

name:可選,默認 None,池化層的名稱。

返回值: 經過池化處理後的 Tensor。

dropout

dropout 是指在深度學習網路的訓練過程中,對於神經網路單元,按照一定的概率將其暫時從網路中丟棄,可以用來防止過擬合,layers 模塊中提供了 dropout() 方法來實現這一操作,定義在 tensorflow/python/layers/core.py。下面我們來說明一下它的用法。

參數說明如下:

inputs:必須,即輸入數據。

rate:可選,默認為 0.5,即 dropout rate,如設置為 0.1,則意味著會丟棄 10% 的神經元。

noise_shape:可選,默認為 None,int32 類型的一維 Tensor,它代表了 dropout mask 的 shape,dropout mask 會與 inputs 相乘對 inputs 做轉換,例如 inputs 的 shape 為 (batch_size, timesteps, features),但我們想要 droput mask 在所有 timesteps 都是相同的,我們可以設置 noise_shape=[batch_size, 1, features]。

seed:可選,默認為 None,即產生隨機熟的種子值。

training:可選,默認為 False,布爾類型,即代表了是否標誌位 training 模式。

name:可選,默認為 None,dropout 層的名稱。

返回: 經過 dropout 層之後的 Tensor。

定義模型函數

創建評估器

定義輸入方法

訓練模型

評估模型

模型測試

參考

[2] TensorFlow layers模塊用法(https://cuiqingcai.com/5715.html)

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI異構 的精彩文章:

並行計算模型

TAG:AI異構 |