TensorFlow變量管理詳解
一、TensorFlow變量管理
1. TensorFLow還提供了tf.get_variable函數(shù)來(lái)創(chuàng)建或者獲取變量,tf.variable用于創(chuàng)建變量時(shí),其功能和tf.Variable基本是等價(jià)的。tf.get_variable中的初始化方法(initializer)的參數(shù)和tf.Variable的初始化過(guò)程也類似,initializer函數(shù)和tf.Variable的初始化方法是一一對(duì)應(yīng)的,詳見下表。
tf.get_variable和tf.Variable最大的區(qū)別就在于指定變量名稱的參數(shù)。對(duì)于tf.Variable函數(shù),變量名稱是一個(gè)可選的參數(shù),通過(guò)name=”v”的形式給出,對(duì)于tf.get_variable函數(shù),變量名稱是一個(gè)必填的參數(shù),tf.get_variable會(huì)根據(jù)這個(gè)名稱去創(chuàng)建或者獲取變量。
2. 通過(guò)tf.variable_scope函數(shù)可以控制tf.get_variable函數(shù)的語(yǔ)義。當(dāng)tf.variable_scope函數(shù)的參數(shù)reuse=True生成上下文管理器時(shí),該上下文管理器內(nèi)的所有的tf.get_variable函數(shù)會(huì)直接獲取已經(jīng)創(chuàng)建的變量,如果變量不存在則報(bào)錯(cuò);當(dāng)tf.variable_scope函數(shù)的參數(shù)reuse=False或者None時(shí)創(chuàng)建的上下文管理器中,tf.get_variable函數(shù)則直接創(chuàng)建新的變量,若同名的變量已經(jīng)存在則報(bào)錯(cuò)。
3. 另tf.variable_scope函數(shù)是可以嵌套使用的。嵌套的時(shí)候,若某層上下文管理器未聲明reuse參數(shù),則該層上下文管理器的reuse參數(shù)與其外層保持一致。
4.tf.variable_scope函數(shù)提供了一個(gè)管理變量命名空間的方式。在tf.variable_scope中創(chuàng)建的變量,名稱.name中名稱前面會(huì)加入命名空間的名稱,并通過(guò)“/”來(lái)分隔命名空間的名稱和變量的名稱。tf.get_variable("foou/baru/u", [1]),可以通過(guò)帶命名空間名稱的變量名來(lái)獲取其命名空間下的變量。
二、TensorFlow編程演示
import tensorflow as tf # 在名字為foo的命名空間內(nèi)創(chuàng)建名字為v的變量 with tf.variable_scope("foo"): v = tf.get_variable("v", [1], initializer=tf.constant_initializer(1.0)) ''''' # 因?yàn)槊臻gfoo內(nèi)已經(jīng)存在變量v,再次創(chuàng)建則報(bào)錯(cuò) with tf.variable_scope("foo"): v = tf.get_variable("v", [1]) # ValueError: Variable foo/v already exists, disallowed. # Did you mean to set reuse=True in VarScope? ''' # 將參數(shù)reuse參數(shù)設(shè)置為True,則tf.get_variable可直接獲取已聲明的變量 with tf.variable_scope("foo", reuse=True): v1 = tf.get_variable("v", [1]) print(v == v1) # True ''''' # 當(dāng)reuse=True時(shí),tf.get_variable只能獲取指定命名空間內(nèi)的已創(chuàng)建的變量 with tf.variable_scope("bar", reuse=True): v2 = tf.get_variable("v", [1]) # ValueError: Variable bar/v does not exist, or was not created with # tf.get_variable(). Did you mean to set reuse=None in VarScope? ''' with tf.variable_scope("root"): # 通過(guò)tf.get_variable_scope().reuse函數(shù)獲取當(dāng)前上下文管理器內(nèi)的reuse參數(shù)取值 print(tf.get_variable_scope().reuse) # False with tf.variable_scope("foo1", reuse=True): print(tf.get_variable_scope().reuse) # True with tf.variable_scope("bar1"): # 嵌套在上下文管理器foo1內(nèi)的bar1內(nèi)未指定reuse參數(shù),則保持與外層一致 print(tf.get_variable_scope().reuse) # True print(tf.get_variable_scope().reuse) # False # tf.variable_scope函數(shù)提供了一個(gè)管理變量命名空間的方式 u1 = tf.get_variable("u", [1]) print(u1.name) # u:0 with tf.variable_scope("foou"): u2 = tf.get_variable("u", [1]) print(u2.name) # foou/u:0 with tf.variable_scope("foou"): with tf.variable_scope("baru"): u3 = tf.get_variable("u", [1]) print(u3.name) # foou/baru/u:0 u4 = tf.get_variable("u1", [1]) print(u4.name) # foou/u1:0 # 可直接通過(guò)帶命名空間名稱的變量名來(lái)獲取其命名空間下的變量 with tf.variable_scope("", reuse=True): u5 = tf.get_variable("foou/baru/u", [1]) print(u5.name) # foou/baru/u:0 print(u5 == u3) # True u6 = tf.get_variable("foou/u1", [1]) print(u6.name) # foou/u1:0 print(u6 == u4) # True
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
分享十個(gè)Python超級(jí)好用提高工作效率的自動(dòng)化腳本
在這個(gè)自動(dòng)化時(shí)代,我們有很多重復(fù)無(wú)聊的工作要做。?想想這些你不再需要一次又一次地做的無(wú)聊的事情,讓它自動(dòng)化,讓你的生活更輕松。本文分享了10個(gè)Python自動(dòng)化腳本,希望對(duì)大家有所幫助2022-11-11python實(shí)現(xiàn)得到一個(gè)給定類的虛函數(shù)
這篇文章主要介紹了python實(shí)現(xiàn)得到一個(gè)給定類的虛函數(shù)的方法,以wx的PyPanel類為例講述了打印以base_開頭的方法的實(shí)例,需要的朋友可以參考下2014-09-09Python?selenium把歌詞評(píng)論做成詞云圖
大家好,本篇文章主要講的是Python?selenium把歌詞評(píng)論做成詞云圖,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2022-01-01Python利用AutoGrad實(shí)現(xiàn)自動(dòng)計(jì)算函數(shù)斜率和梯度
AutoGrad 是一個(gè)老少皆宜的 Python 梯度計(jì)算模塊。對(duì)于大學(xué)生、機(jī)器學(xué)習(xí)愛好者而言,你只需要傳遞給它Numpy這樣的標(biāo)準(zhǔn)數(shù)據(jù)庫(kù)下編寫的損失函數(shù),它就可以自動(dòng)計(jì)算損失函數(shù)的導(dǎo)數(shù)(梯度)。本文將從普通斜率計(jì)算開始,介紹到如何只使用它來(lái)實(shí)現(xiàn)一個(gè)邏輯回歸模型2022-07-07