卷積操作
tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None)
除去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)
l x:指輸入,輸入tensor
l keep_prob: float型別,每個元素被保留下來的概率,設定神經元被選中的概率,在初始化時keep_prob是一個佔位符, keep_prob = tf.placeholder(tf.float32) 。tensorflow在run時設定keep_prob具體的值,例如keep_prob: 0.5
l noise_shape : 一個1維的int32張量,代表了隨機產生“保留/丟棄”標誌的shape。
l seed : 整形變數,隨機數種子。
l 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 個標準差的值將被丟棄並重新選擇。
l shape:一維整數張量或 Python 陣列,輸出張量的形狀。
l mean:dtype 型別的 0-D 張量或 Python 值,截斷正態分佈的均值。
l stddev:dtype 型別的 0-D 張量或 Python 值,截斷前正態分佈的標準偏差。
l dtype:輸出的型別。
l seed:一個 Python 整數。用於為分發建立隨機種子。檢視tf.set_random_seed行為。
l name:操作的名稱(可選)。
函式返回值:tf.truncated_normal函式返回指定形狀的張量填充隨機截斷的正常值。
最大值池化操作
tf.nn.max_pool(value, ksize, strides, padding, name=None)
引數是四個,和卷積很類似:
l value:需要池化的輸入,一般池化層接在卷積層後面,所以輸入通常是feature map,依然是[batch, height, width, channels]這樣的shape
l ksize:池化視窗的大小,取一個四維向量,一般是[1, height, width, 1],因為我們不想在batch和channels上做池化,所以這兩個維度設為了1
l strides:和卷積類似,視窗在每一個維度上滑動的步長,一般也是[1, stride,stride, 1]
l padding:和卷積類似,可以取`VALID` 或者`SAME`
返回一個Tensor,型別不變,shape仍然是[batch, height, width, channels]這種形式
兩個矩陣中對應元素各自相乘
tf.multiply(x, y, name=None)
引數:
l x: 一個型別為:half, float32, float64, uint8, int8, uint16, int16, int32, int64, complex64, complex128的張量。
l 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)
引數:
l a: 一個型別為 float16, float32, float64, int32, complex64, complex128 且張量秩 > 1 的張量。
l b: 一個型別跟張量a相同的張量。
l transpose_a: 如果為真, a則在進行乘法計算前進行轉置。
l transpose_b: 如果為真, b則在進行乘法計算前進行轉置。
l adjoint_a: 如果為真, a則在進行乘法計算前進行共軛和轉置。
l adjoint_b: 如果為真, b則在進行乘法計算前進行共軛和轉置。
l a_is_sparse: 如果為真, a會被處理為稀疏矩陣。
l b_is_sparse: 如果為真, b會被處理為稀疏矩陣。
l 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。
引數:
l features: tensor型別,必須是這些型別:A Tensor. float32, float64, int32, int64, uint8, int16, int8, uint16, half.
l 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沒有條目,則縮小所有維度,並返回具有單個元素的張量。
引數:
l input_tensor:要減少的張量。應該有數字型別。
l axis:要減小的尺寸。如果為None(預設),則縮小所有尺寸。必須在範圍[-rank(input_tensor), rank(input_tensor))內。
l keep_dims:如果為true,則保留長度為1的縮小尺寸。
l name:操作的名稱(可選)。
l 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矩陣大小相同。