1. 程式人生 > >整理使用tensorflow過程中遇到的一些函式

整理使用tensorflow過程中遇到的一些函式

tf.nn.conv2d(input,filter,strides,padding,use_cudnn_on_gpu=None, name=None)

第一個引數input:指需要做卷積的輸入影象,它要求是一個Tensor,具有[batch, in_height, in_width, in_channels]這樣的shape,具體含義是[訓練時一個batch的圖片數量, 圖片高度, 圖片寬度, 影象通道數],注意這是一個4維的Tensor,要求型別為float32和float64其中之一

第二個引數filter:相當於CNN中的卷積核,它要求是一個Tensor,具有[filter_height, filter_width, in_channels, out_channels]這樣的shape,具體含義是[卷積核的高度,卷積核的寬度,影象通道數,卷積核個數],要求型別與引數input相同,有一個地方需要注意,第三維in_channels,就是引數input的第四維。

第三個引數strides:卷積時在影象每一維的步長,這是一個一維的向量,長度4。

第四個引數padding:string型別的量,只能是"SAME","VALID"其中之一,表示的是卷積的形式,是否考慮邊界。"SAME"是考慮邊界,不足的時候用0去填充周圍,"VALID"則不考慮第五個引數:use_cudnn_on_gpu:bool型別,是否使用cudnn加速,預設為true

 

tf.nn.bias_add(value,bias,name=None)將偏差項bias加到value上面。

 

tf.truncated_normal(shape,mean=

0.0,stddev=1.0,dtype=tf.float32, seed=None, name=None)

截斷的正態分佈中輸出隨機值。生成的值服從具有指定平均值和標準偏差的正態分佈,如果生成的值大於平均值2個標準偏差的值則丟棄重新選擇。

 

tf.nn.max_pool(value, ksize, strides, padding, name=None)

第一個引數value:需要池化的輸入,一般池化層接在卷積層後面,所以輸入通常是feature map,依然是[batch, height, width, channels]這樣的shape。

第二個引數ksize:池化視窗的大小,取一個四維向量,一般是[1, height, width, 1],因為我們不想在batch和channels上做池化,所以這兩個維度設為了1。

第三個引數strides:和卷積類似,視窗在每一個維度上滑動的步長,一般也是[1, stride,stride, 1]。

第四個引數padding:和卷積類似,可以取'VALID' 或者'SAME'。

 

tf.reshape(tensor, shape, name=None)

函式的作用是將tensor變換為引數shape的形式。 其中shape為一個列表形式,特殊的一點是列表中可以存在-1。-1代表的含義是不用我們自己指定這一維的大小,函式會自動計算,但列表中只能存在一個-1。(當然如果存在多個-1,就是一個存在多解的方程了)。

例子:

# tensor 't' is [1, 2, 3, 4, 5, 6, 7, 8, 9]

# tensor 't' has shape [9]

reshape(t, [3, 3]) ==> [[1, 2, 3],[4, 5, 6],[7, 8, 9]]

# tensor 't' is [[[1, 1], [2, 2]],

#                [[3, 3], [4, 4]]]

# tensor 't' has shape [2, 2, 2]

reshape(t, [2, 4]) ==> [[1, 1, 2, 2],

                        [3, 3, 4, 4]]

# tensor 't' is [[[1, 1, 1],

#                 [2, 2, 2]],

#                [[3, 3, 3],

#                 [4, 4, 4]],

#                [[5, 5, 5],

#                 [6, 6, 6]]]

# tensor 't' has shape [3, 2, 3]

# pass '[-1]' to flatten 't'

reshape(t, [-1]) ==> [1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6]

# -1 can also be used to infer the shape

# -1 is inferred to be 9:

reshape(t, [2, -1]) ==> [[1, 1, 1, 2, 2, 2, 3, 3, 3],

                         [4, 4, 4, 5, 5, 5, 6, 6, 6]]

 

tf.cond(pred, fn1, fn2, name=None)

Return :either fn1() or fn2() based on the boolean predicate `pred`.(注意這裡,也就是說'fnq'和‘fn2’是兩個函式)

 

tf.nn.dropout是TensorFlow裡面為了防止或減輕過擬合而使用的函式,它一般用在全連線層。

Dropout就是在不同的訓練過程中隨機扔掉一部分神經元。也就是讓某個神經元的啟用值以一定的概率p,讓其停止工作,這次訓練過程中不更新權值,也不參加神經網路的計算。但是它的權重得保留下來(只是暫時不更新而已),因為下次樣本輸入時它可能又得工作了。但在測試及驗證中:每個神經元都要參加運算,但其輸出要乘以概率p。

tf.nn.dropout(x, keep_prob, noise_shape=None, seed=None,name=None) 

第一個引數x:指輸入

第二個引數keep_prob: 設定神經元被選中的概率,在初始化時keep_prob是一個佔位符,。

 

numpy.save(file, arr, allow_pickle=True, fix_imports=True)

file:檔名/檔案路徑
arr:要儲存的陣列
allow_pickle:布林值,允許使用Python pickles儲存物件陣列(可選引數,預設即可)
fix_imports:為了方便Pyhton2中讀取Python3儲存的資料(可選引數,預設即可)

儲存一個數組到一個二進位制的檔案中,儲存格式是.npy

 

dict.items()

Python字典(Dictionary)items()函式以列表返回可遍歷的(鍵,值)元組陣列。