TensorFlow卷積網絡經常使用函數參數詳細總結

卷積操做html

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

除去name參數用以指定該操做的name,與方法有關的一共五個參數:算法

  • 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"或"VALID",其中"SAME"表示添加全0填充,保證卷積前輸入的矩陣和卷積後的輸出矩陣大小一致,"VALID"表示不添加。
  • use_cudnn_on_gpu bool類型,是否使用cudnn加速,默認爲true

結果返回一個Tensor,這個輸出,就是咱們常說的feature map數組

 

防止過擬合緩存

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

x:指輸入,輸入tensordom

keep_prob: float類型,每一個元素被保留下來的機率,設置神經元被選中的機率,在初始化時keep_prob是一個佔位符, keep_prob = tf.placeholder(tf.float32) 。tensorflow在run時設置keep_prob具體的值,例如keep_prob: 0.5異步

noise_shape  : 一個1維的int32張量,表明了隨機產生「保留/丟棄」標誌的shape。分佈式

seed : 整形變量,隨機數種子。ide

name:指定該操做的名字

dropout必須設置機率keep_prob,而且keep_prob也是一個佔位符,跟輸入是同樣的

keep_prob = tf.placeholder(tf.float32)

train的時候纔是dropout起做用的時候,test的時候不該該讓dropout起做用

 

tf.truncated_normal(shape,mean=0.0, stddev=1.0,dtype=tf.float32,seed=None,name=None)

從截斷的正態分佈中輸出隨機值。生成的值遵循具備指定平均值和標準誤差的正態分佈,不一樣之處在於其平均值大於 2 個標準差的值將被丟棄並從新選擇。

shape:一維整數張量或 Python 數組,輸出張量的形狀。

mean:dtype 類型的 0-D 張量或 Python 值,截斷正態分佈的均值。

stddev:dtype 類型的 0-D 張量或 Python 值,截斷前正態分佈的標準誤差。

dtype:輸出的類型。

seed:一個 Python 整數。用於爲分發建立隨機種子。查看tf.set_random_seed行爲。

name:操做的名稱(可選)。

        函數返回值:tf.truncated_normal函數返回指定形狀的張量填充隨機截斷的正常值。

 

最大值池化操做

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'

返回一個Tensor,類型不變,shape仍然是[batch, height, width, channels]這種形式

 

兩個矩陣中對應元素各自相乘

 tf.multiply(x, y, name=None) 

參數:

x: 一個類型爲:half, float32, float64, uint8, int8, uint16, int16, int32, int64, complex64, complex128的張量。

y: 一個類型跟張量x相同的張量。  

返回值: x * y element-wise.  

注意: 

(1)       multiply這個函數實現的是元素級別的相乘,也就是兩個相乘的數元素各自相乘,而不是矩陣乘法,注意和tf.matmul區別。 

(2)       兩個相乘的數必須有相同的數據類型,否則就會報錯。

 

將矩陣a乘以矩陣b,生成a * b

 tf.matmul(a, b, transpose_a=False, transpose_b=False, adjoint_a=False, adjoint_b=False, a_is_sparse=False, b_is_sparse=False, name=None) 

參數: 

a: 一個類型爲 float16, float32, float64, int32, complex64, complex128 且張量秩 > 1 的張量。 

b: 一個類型跟張量a相同的張量。 

transpose_a: 若是爲真, a則在進行乘法計算前進行轉置。 

transpose_b: 若是爲真, b則在進行乘法計算前進行轉置。 

adjoint_a: 若是爲真, a則在進行乘法計算前進行共軛和轉置。 

adjoint_b: 若是爲真, b則在進行乘法計算前進行共軛和轉置。 

a_is_sparse: 若是爲真, a會被處理爲稀疏矩陣。 

b_is_sparse: 若是爲真, b會被處理爲稀疏矩陣。 

name: 操做的名字(可選參數) 

返回值:一個跟張量a和張量b類型同樣的張量且最內部矩陣是a和b中的相應矩陣的乘積。 

注意: 

(1)輸入必須是矩陣(或者是張量秩 >2的張量,表示成批的矩陣),而且其在轉置以後有相匹配的矩陣尺寸。 

(2)兩個矩陣必須都是一樣的類型,支持的類型以下:float16, float32, float64, int32, complex64, complex128。 

引起錯誤: 

ValueError: 若是transpose_a 和 adjoint_a, 或 transpose_b 和 adjoint_b 都被設置爲真

 

TF-激活函數 tf.nn.relu

tf.nn.relu(features, name = None)

做用:

計算激活函數 relu,即 max(features, 0)。即將矩陣中每行的非最大值置0。是將大於0的數保持不變,小於0的數置爲0,計算修正線性單元(很是經常使用):max(features, 0).而且返回和feature同樣的形狀的tensor。

參數:

features: tensor類型,必須是這些類型:A Tensor. float32, float64, int32, int64, uint8, int16, int8, uint16, half.

name: :操做名稱(可選)

 

重塑張量

reshape( tensor, shape, name=None )

參數:

  • tensor:一個Tensor。
  • shape:一個Tensor;必須是如下類型之一:int32,int64;用於定義輸出張量的形狀。
  • name:操做的名稱(可選)。

返回值:

該操做返回一個Tensor。與tensor具備相同的類型。

 

用於定義建立變量(層)的操做的上下文管理器。 

_init__( name_or_scope, default_name=None, values=None, initializer=None, regularizer=None, caching_device=None, partitioner=None, custom_getter=None, reuse=None, dtype=None, use_resource=None, constraint=None, auxiliary_name_scope=True )

參數:

  • name_or_scope:string或者VariableScope表示打開的範圍。
  • default_name:若是name_or_scope參數爲None,則使用默認的名稱,該名稱將是惟一的;若是提供了name_or_scope,它將不會被使用,所以它不是必需的,而且能夠是None。
  • values:傳遞給操做函數的Tensor參數列表。
  • initializer:此範圍內變量的默認初始值設定項。
  • regularizer:此範圍內變量的默認正規化器。
  • caching_device:此範圍內變量的默認緩存設備。
  • partitioner:此範圍內變量的默認分區程序。
  • custom_getter:此範圍內的變量的默認自定義吸氣。
  • reuse:能夠是True、None或tf.AUTO_REUSE;若是是True,則咱們進入此範圍的重用模式以及全部子範圍;若是是tf.AUTO_REUSE,則咱們建立變量(若是它們不存在),不然返回它們;若是是None,則咱們繼承父範圍的重用標誌。當啓用緊急執行時,該參數老是被強制爲tf.AUTO_REUSE。
  • dtype:在此範圍中建立的變量類型(默​​認爲傳入範圍中的類型,或從父範圍繼承)。
  • use_resource:若是爲false,則全部變量都將是常規變量;若是爲true,則將使用具備明肯定義的語義的實驗性 ResourceVariables。默認爲false(稍後將更改成true)。當啓用緊急執行時,該參數老是被強制爲true。
  • constraint:一個可選的投影函數,在被Optimizer(例如用於實現層權重的範數約束或值約束)更新以後應用於該變量。該函數必須將表明變量值的未投影張量做爲輸入,並返回投影值的張量(它必須具備相同的形狀)。進行異步分佈式培訓時,約束條件的使用是不安全的。
  • auxiliary_name_scope:若是爲True,則咱們用範圍建立一個輔助名稱範圍;若是爲False,則咱們不接觸名稱範圍。

返回值:

返回能夠捕獲和重用的範圍。

可能引起的異常:

  • ValueError:在建立範圍內嘗試重用時,或在重用範圍內建立時。
  • TypeError:某些參數的類型不合適時。

https://www.w3cschool.cn/tensorflow_python/tensorflow_python-61ue2ocp.html

 

計算張量的各個維度上的元素的平均值

reduce_mean(input_tensor, axis=None, keep_dims=False,name=None,reduction_indices=None )

參數:

  • input_tensor:要減小的張量。應該有數字類型。
  • axis:要減少的尺寸。若是爲None(默認),則減小全部維度。必須在[-rank(input_tensor),      rank(input_tensor))範圍內。
  • keep_dims:若是爲true,則保留長度爲1的縮小尺寸。
  • name:操做的名稱(可選)。
  • reduction_indices:axis的不支持使用的名稱。

返回:該函數返回減小的張量。numpy兼容性至關於np.mean

 

轉換數據類型

tf.cast(x, dtype, name=None)  
將x的數據格式轉化成dtype.例如,原來x的數據格式是bool,  
那麼將其轉化成float之後,就可以將其轉化成0和1的序列。反之也能夠

求最大值tf.reduce_max(input_tensor, reduction_indices=None, keep_dims=False, name=None)
求平均tf.reduce_mean(input_tensor, reduction_indices=None, keep_dims=False,name=None)
參數1--input_tensor:待求值的tensor
參數2--reduction_indices:在哪一維上求解。

舉例說明
# 'x' is [[1., 2.]
#         [3., 4.]]
x是一個2維數組,分別調用reduce_*函數以下:
首先求平均值:
tf.reduce_mean(x) ==> 2.5 #若是不指定第二個參數,那麼就在全部的元素中取平均值
tf.reduce_mean(x, 0) ==> [2.,  3.] #指定第二個參數爲0,則第一維的元素取平均值,即每一列求平均值
tf.reduce_mean(x, 1) ==> [1.5,  3.5] #指定第二個參數爲1,則第二維的元素取平均值,即每一行求平均值

 

#使用優化算法使得代價函數最小化

tf.train.AdamOptimizer

__init__(learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-08, use_locking=False, name='Adam')
此函數是Adam優化算法:是一個尋找全局最優勢的優化算法,引入了二次方梯度校訂。

相比於基礎SGD算法,1.不容易陷於局部優勢。2.速度更快!

 

計算交叉熵的代價函數

reduce_sum (input_tensor , axis = None , keep_dims = False ,  name = None , reduction_indices = None
此函數計算一個張量的各個維度上元素的總和。

函數中的input_tensor是按照axis中已經給定的維度來減小的;除非 keep_dims 是true,不然張量的秩將在axis的每一個條目中減小1;若是keep_dims爲true,則減少的維度將保留爲長度1。 若是axis沒有條目,則縮小全部維度,並返回具備單個元素的張量。
參數:

input_tensor:要減小的張量。應該有數字類型。

axis:要減少的尺寸。若是爲None(默認),則縮小全部尺寸。必須在範圍[-rank(input_tensor), rank(input_tensor))內。

keep_dims:若是爲true,則保留長度爲1的縮小尺寸。

name:操做的名稱(可選)。

reduction_indices:axis的廢棄的名稱。
返回:
該函數返回減小的張量。 numpy兼容性 至關於np.sum

 

對比這兩個矩陣或者向量的相等的元素

tf.equal(A, B)

若是是相等的那就返回True,反正返回False,返回的值的矩陣維度和A是同樣的

例如:
A = [[1,3,4,5,6]]
B = [[1,3,4,3,2]]
with tf.Session() as sess:
    print(sess.run(tf.equal(A, B)))
[[ True  True  True False False]]
該函數將返回一個 bool 類型的張量。

 

獲取具備這些參數的現有變量或建立一個新變量。 

get_variable( name, shape=None, dtype=None, initializer=None, regularizer=None, trainable=True, collections=None, caching_device=None, partitioner=None, validate_shape=True, use_resource=None, custom_getter=None )

參數:

  • name:新變量或現有變量的名稱。
  • shape:新變量或現有變量的形狀。
  • dtype:新變量或現有變量的類型(默認爲      DT_FLOAT)。
  • initializer:建立變量的初始化器。
  • regularizer:一個函數(張量 - >張量或無);將其應用於新建立的變量的結果將被添加到集合 tf.GraphKeys.REGULARIZATION_LOSSES 中,並可用於正則化。
  • trainable:若是爲 True,還將變量添加到圖形集合:GraphKeys.TRAINABLE_VARIABLES。
  • collections:要將變量添加到其中的圖形集合鍵的列表。默認爲 [GraphKeys.LOCAL_VARIABLES]。
  • caching_device:可選的設備字符串或函數,描述變量應該被緩存以讀取的位置。默認爲變量的設備,若是不是 None,則在其餘設備上進行緩存。典型的用法的在使用該變量的操做所在的設備上進行緩存,經過 Switch 和其餘條件語句來複制重複數據刪除。 
  • partitioner:(可選)可調用性,它接受要建立的變量的徹底定義的 TensorShape 和 dtype,而且返回每一個座標軸的分區列表(當前只能對一個座標軸進行分區)。
  • validate_shape:若是爲假,則容許使用未知形狀的值初始化變量。若是爲真,則默認狀況下,initial_value 的形狀必須是已知的。
  • use_resource:若是爲假,則建立一個常規變量。若是爲真,則建立一個實驗性的 ResourceVariable,而不是具備明肯定義的語義。默認爲假(稍後將更改成真)。
  • custom_getter:可調用的,將第一個參數做爲真正的 getter,並容許覆蓋內部的      get_variable 方法。custom_getter      的簽名應該符合這種方法,但最經得起將來考驗的版本將容許更改:def custom_getter(getter, *args, **kwargs)。還容許直接訪問全部 get_variable 參數:def      custom_getter(getter, name, *args, **kwargs)。建立具備修改的名稱的變量的簡單標識自定義 getter 是:python def      custom_getter(getter, name, *args, **kwargs): return getter(name +      '_suffix', *args, **kwargs) 

返回值:建立或存在Variable(或者PartitionedVariable,若是使用分區器)。

可能引起的異常:

  • ValueError:當建立新的變量和形狀時,在變量建立時違反重用,或當 initializer 的 dtype 和 dtype 不匹配時。在      variable_scope 中設置重用。

 

 

 

 

tf.truncated_normal_initializer函數

生成截斷正態分佈的初始化程序。

tf.truncated_normal_initializer方法

__init__(

    mean=0.0,

    stddev=1.0,

    seed=None,

    dtype=tf.float32

)

__call__(

    shape,

    dtype=None,

    partition_info=None

)

from_config(

    cls,

    config

)

函數參數:

  • mean:一個 python 標量或一個標量張量,要生成的隨機值的均值。
  • stddev:一個 python 標量或一個標量張量,要生成的隨機值的標準誤差。
  • seed:一個 Python 整數,用於建立隨機種子。查看tf.set_random_seed行爲。
  • dtype:數據類型,僅支持浮點類型。

 

LRN函數相似DROPOUT和數據加強做爲relu激勵以後防止數據過擬合而提出的一種處理方法,全稱是 local response normalization--局部響應標準化

tf.nn.lrn

def lrn(input, depth_radius=None, bias=None, alpha=None, beta=None,name=None):

 

tf.nn.bias_add()

 一個叫bias的向量加到一個叫value的矩陣上,是向量與矩陣的每一行進行相加,獲得的結果和value矩陣大小相同。

相關文章
相關標籤/搜索