TensorFlow常用函數(shù)介紹

對于TensorFlow中的基本用法狠角,參考了網(wǎng)上很多博客,把自己認為解釋的比較好的做一些整理揣苏。

tensorflow中tf.Variable()與tf.get_variable()兩個函數(shù)的區(qū)別

一個變量通過調(diào)用run() 方法維持圖的狀態(tài)。你通過構(gòu)造variable 類的實例來添加一個變量到圖中。Variable() 構(gòu)造器需要一個初始值坷虑,可以是任意類型和shape 的Tensor。初始值定義了變量的type和shape埂奈。構(gòu)造完成之后迄损,變量的type和shape 是固定的≌嘶牵可以使用assign 方法來修改變量的值芹敌。如果你想修改變量的shape,你必須使用assign 操作垮抗。并且validate_shpe=False氏捞。就像任何Tensor,通過Variable() 創(chuàng)建的variable冒版,可以用作圖中其他操作節(jié)點的輸入液茎。另外,所有操作承載的Tensor 類傳遞給variables

圖一

首先解釋一下個別參數(shù)的含義


initial_value: ?一個Tensor辞嗡,或者可以轉(zhuǎn)化為Tensor的Python對象捆等,其含義為:變量的初始值。初始值必須指定shape除非validate_shape 被設(shè)置為False;

trainable: ?如果是True续室,變量也默認添加到GraphKeys.TRAINABLE_VARIABLES栋烤。這是很多優(yōu)化器類使用的默認變量列表

collections:指定該圖變量的類型、默認為[GraphKeys.GLOBAL_VARIABLES]挺狰,為list類型

validate_shape:如果為False明郭,則不進行類型和維度檢查

name:變量的名稱,如果沒有指定則系統(tǒng)會自動分配一個唯一的值

具體區(qū)別:

1. tf.get_variable跟tf.Variable都可以用來定義圖變量她渴,但是前者的必需參數(shù)(即第一個參數(shù))并不是圖變量的初始值达址,而是圖變量的名稱。盡管上圖顯示每一個變量函數(shù)都有很多的參數(shù)趁耗,但是也只有第一個是必須填寫的

2.?使用tf.Variable時沉唠,如果檢測到命名沖突,系統(tǒng)會自己處理苛败。使用tf.get_variable()時满葛,系統(tǒng)不會處理沖突径簿,而會報錯


圖二

? ? ? ? 基于這兩個函數(shù)的特性,當我們需要共享變量的時候嘀韧,需要使用tf.get_variable()篇亭。在其他情況下,這兩個的用法是一樣的锄贷。他們之間的實質(zhì)性區(qū)別就是:由于tf.Variable()每次都在創(chuàng)建新對象译蒂,所有reuse=True和它并沒有什么關(guān)系。對于get_variable()谊却,來說柔昼,如果已經(jīng)創(chuàng)建的變量對象,就把那個對象返回炎辨,如果沒有創(chuàng)建變量對象的話捕透,就創(chuàng)建一個新的。

tf.variable_scope和tf.name_scope

? ? ? ? 在圖二中使用tf.get_variable()遇到相同名字的變量碴萧,就會報錯乙嘀。為什么提到這兩個函數(shù),這兩個函數(shù)有什么作用破喻?簡單來說就是為變量添加命名域虎谢,一個深度學(xué)習(xí)模型的參數(shù)變量往往是成千上萬的,不加上命名空間加以分組整理低缩,將會成為可怕的災(zāi)難嘉冒。TensorFlow的命名空間分為兩種,tf.variable_scope和tf.name_scope咆繁。

? ? ? ? tf.variable_scope可以讓變量有相同的命名,包括tf.get_variable得到的變量顶籽,還有tf.Variable的變量tf.name_scope可以讓變量有相同的命名玩般,只是限于tf.Variable的變量


圖三


圖四

換成下面的代碼就可以執(zhí)行了:


圖五


神經(jīng)網(wǎng)絡(luò)組件:tf.nn

一.激活函數(shù)

常見的激活函數(shù)的模型可以參考這篇博客:常見激活函數(shù)總結(jié)

激活操作提供了在神經(jīng)網(wǎng)絡(luò)中使用的不同類型的非線性模型礼饱。包括光滑非線性模型(sigmoid, tanh, elu, softplus, and softsign)坏为。連續(xù)但是不是處處可微的函數(shù)(relu, relu6, crelu and relu_x)。當然還有隨機正則化 (dropout)所有的激活操作都是作用在每個元素上面的镊绪,輸出一個tensor和輸入的tensor又相同的形狀和數(shù)據(jù)類型匀伏。這里列出tensorflow提供的這些激活函數(shù),但是就不細講原理了,參照鏈接就行.至于使用也是非常簡單的.只以relu作為例子,其他的使用方式差不多.

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

參數(shù):

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

name:?操作名稱(可選)

還有一些其他的激活函數(shù)為:


圖六


二.分類

分類實現(xiàn)了一些交叉熵的函數(shù)等等蝴韭,要是你的神經(jīng)網(wǎng)絡(luò)有分類的任務(wù)什么的化够颠,一般可以用在輸出層。Tensorflow的softmax_cross_entropy_with_logits函數(shù)榄鉴、TensorFlow四種Cross Entropy算法實現(xiàn)和應(yīng)用履磨。

1.? tf.nn.softmax(logits, dim=-1, name=None)

參數(shù):

logits:非空的tensor蛉抓,類型必須為half, float32, float64.

dim:softmax作用的維度,默認是-1剃诅,表示最后一個維度

name:【可選】這個操作的名字

返回值:

返回一個tensor巷送,和logits有相同的類型和形狀

2. tf.nn.log_softmax(logits, dim=-1, name=None)

3. tf.nn.softmax_cross_entropy_with_logits(logits, labels, dim=-1, name=None)

作用:對于logitslabels之間計算softmax交叉熵。要是你對于softmax熟悉的話矛辕,這里很容易理解笑跛。通俗來說,就是在離散分類任務(wù)的時候度量概率誤差的聊品。softmax之后的每一個分量就代表一個類飞蹂,分量(類)上面的值就是該類的概率。

這個函數(shù)并不是計算softmax的函數(shù)杨刨,只是根據(jù)softmax計算分類誤差晤柄,所以不要吧這個函數(shù)當做softmax函數(shù)使用。logits和labels必須有相同的形狀[batch_size, num_classes]相同的類型 (either float16, float32, or float64)妖胀。

logits:Unscaled log probabilities.

labels:你的labels矩陣芥颈,每一行代表一個樣本的概率分布(要是你熟悉softmax和onehot encoding的話)

dim:作用的維度,默認是-1赚抡,表示最后的那個維度

name:【可選】這個操作的名字

返回:一個1維的tensor,長度為batch_size,類型和logits一樣涂臣。其中是各個元素相應(yīng)樣本的softmax的交叉熵損失盾计。

4. tf.nn.weighted_cross_entropy_with_logits(logits, targets, pos_weight, name=None)

其他


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

按概率來將x中的一些元素值置零,并將其他的值放大赁遗。用于進行dropout操作署辉,一定程度上可以防止過擬合

x是一個張量,而keep_prob是一個(0,1]之間的值岩四。x中的各個元素清零的概率互相獨立哭尝,為1-keep_prob,而沒有清零的元素,則會統(tǒng)一乘以1/keep_prob, 目的是為了保持x的整體期望值不變剖煌。


tf.fill(shape,value,name=None) :創(chuàng)建一個形狀大小為shape的tensor材鹦,其初始值為value:


tf.constant(value,dtype=None,shape=None,name=’Const’)

創(chuàng)建一個常量tensor,按照給出value來賦值耕姊,可以用shape來指定其形狀桶唐。value可以是一個數(shù),也可以是一個list茉兰。如果是一個數(shù)尤泽,那么這個常亮中所有值的按該數(shù)來賦值。如果是list,那么len(value)一定要小于等于shape展開后的長度。賦值時安吁,先將value中的值逐個存入醉蚁。不夠的部分,則全部存入value的最后一個值鬼店。



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

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

tf.random_uniform(shape,minval=0,maxval=None,dtype=tf.float32,seed=None,name=None)

這幾個都是用于生成隨機數(shù)tensor的网棍。尺寸是shape

random_normal: 正太分布隨機數(shù),均值mean,標準差stddev

truncated_normal:截斷正態(tài)分布隨機數(shù)妇智,均值mean,標準差stddev,不過只保留[mean-2*stddev,mean+2*stddev]范圍內(nèi)的隨機數(shù)

random_uniform:均勻分布隨機數(shù)滥玷,范圍為[minval,maxval]。


tf.expand_dims(Tensor, dim):為張量+1維



tf.pack(values, axis=0, name=”pack”):?將一個R維張量列表沿著axis軸組合成一個R+1維的張量


tf.concat(concat_dim, values, name=”concat”):?將張量沿著指定維數(shù)拼接起來巍棱。


tf.sparse_to_dense:稀疏矩陣轉(zhuǎn)密集矩陣


幾個參數(shù)的含義:

sparse_indices: 元素的坐標[[0,0],[1,2]] 表示(0,0)惑畴,和(1,2)處有值

output_shape: 得到的密集矩陣的shape

sparse_values: sparse_indices坐標表示的點的值,可以是0D或者1D張量航徙。若0D如贷,則所有稀疏值都一樣。若是1D到踏,則len(sparse_values)應(yīng)該等于len(sparse_indices)

default_values: 缺省點的默認值


tf.random_shuffle(value,seed=None,name=None):沿著value的第一維進行隨機重新排列



tf.argmax | tf.argmin

tf.argmax(input=tensor,dimention=axis):找到給定的張量tensor中在指定軸axis上的最大值/最小值的位置杠袱。



tf.equal(x, y, name=None):?判斷兩個tensor是否每個元素都相等。返回一個格式為bool的tensor


cast(x, dtype, name=None):將x的數(shù)據(jù)格式轉(zhuǎn)化成dtype.例如窝稿,原來x的數(shù)據(jù)格式是bool楣富,那么將其轉(zhuǎn)化成float以后,就能夠?qū)⑵滢D(zhuǎn)化成0和1的序列伴榔。反之也可以


tf.clip_by_global_norm(t_list, clip_norm, use_norm=None, name=None):修正梯度值纹蝴,用于控制梯度爆炸的問題。梯度爆炸和梯度彌散的原因一樣踪少,都是因為鏈式法則求導(dǎo)的關(guān)系塘安,導(dǎo)致梯度的指數(shù)級衰減。為了避免梯度爆炸援奢,需要對梯度進行修剪耙旦。

函數(shù)返回2個參數(shù): list_clipped,修剪后的張量萝究,以及global_norm,一個中間計算量锉罐。當然如果你之前已經(jīng)計算出了global_norm值帆竹,你可以在use_norm選項直接指定global_norm的值。

TensorFlow中緯度的計算:參考文章:TensorFlow的緯度計算

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末脓规,一起剝皮案震驚了整個濱河市栽连,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖秒紧,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绢陌,死亡現(xiàn)場離奇詭異,居然都是意外死亡熔恢,警方通過查閱死者的電腦和手機脐湾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來叙淌,“玉大人秤掌,你說我怎么就攤上這事∮セ簦” “怎么了闻鉴?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長茂洒。 經(jīng)常有香客問我孟岛,道長,這世上最難降的妖魔是什么督勺? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任渠羞,我火速辦了婚禮,結(jié)果婚禮上玷氏,老公的妹妹穿的比我還像新娘堵未。我一直安慰自己,他們只是感情好盏触,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布渗蟹。 她就那樣靜靜地躺著,像睡著了一般赞辩。 火紅的嫁衣襯著肌膚如雪雌芽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天辨嗽,我揣著相機與錄音世落,去河邊找鬼。 笑死糟需,一個胖子當著我的面吹牛屉佳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播洲押,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼武花,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了杈帐?” 一聲冷哼從身側(cè)響起体箕,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤专钉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后累铅,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體跃须,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年娃兽,在試婚紗的時候發(fā)現(xiàn)自己被綠了菇民。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡换薄,死狀恐怖玉雾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情轻要,我是刑警寧澤复旬,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站冲泥,受9級特大地震影響驹碍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜凡恍,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一志秃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嚼酝,春花似錦浮还、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至涎跨,卻和暖如春洼冻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背隅很。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工撞牢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人叔营。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓屋彪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親绒尊。 傳聞我的和親對象是個殘疾皇子撼班,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1. tf函數(shù) tensorflow 封裝的工具類函數(shù) | 操作組 | 操作 ||:-------------| ...
    南墻已破閱讀 5,122評論 0 5
  • 在一起也很久了,卻發(fā)現(xiàn)我們越來越謀生垒酬,越來越不信任,是我多疑了,還是你真的沒把我放在心里勘究,可能正如你所說的矮湘,我們...
    Merciess閱讀 481評論 0 1
  • 怎么才稱得上是壓縮PDF文件的“小能手”?首先得是一款能夠?qū)I(yè)編輯PDF文件的PDF閱讀編輯器口糕,其次需要有壓縮功能...
    小皇可可閱讀 525評論 0 0
  • 早在兩千多年前的戰(zhàn)國時代缅阳,著名思想家孟子就提倡"老吾老以及人之老,幼吾幼以及人之幼"的博愛思想景描。 博愛十办,就是...
    言行合一閱讀 1,226評論 1 2