一看就懂的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)


TAG:AI異構 |