色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術(shù)文章
文章詳情頁

聊聊python的gin庫的介紹和使用

瀏覽:24日期:2022-06-21 17:17:35
1.簡介

由于現(xiàn)在很多機器學(xué)習(xí)的實驗需要設(shè)置繁瑣的參數(shù),在多次實驗中,有些參數(shù)是一樣的,為了方便設(shè)置參數(shù),Gin庫出現(xiàn)了。它允許函數(shù)或類被注釋為@gin.configurable,這使得能夠使用清晰而強大的語法通過簡單的配置文件來設(shè)置它們的參數(shù)。這種方法減少了配置維護(hù),同時使實驗配置透明且易于重復(fù)。

簡單理解,gin像一個封裝了參數(shù)配置的類,使用這個類將使得大量的參數(shù)配置變得簡單清晰

安裝

pip install [email protected]

任何函數(shù)和類都可以使用@gin.configurable裝飾器

@gin.configurabledef my_network(images, num_outputs, num_layers=3, weight_decay=1e-4): ...

@gin.configurable裝飾器做了如下三件事:

把類或函數(shù)聲明成了可配置的東西 它決定了函數(shù)或類構(gòu)造函數(shù)的哪些參數(shù)是可配置的(默認(rèn)情況下是其所有的參數(shù)) 封裝類或函數(shù),攔截調(diào)用,并向函數(shù)的可配置參數(shù)提供來自參數(shù)設(shè)置全局注冊表的值(這些值是類或函數(shù)聲明時沒有指定的值)

為了確定哪些是可以配置的參數(shù),@gin.configurable會使用到allowlist和denylist參數(shù),分別聲明哪些是可配的哪些是不可配的,我們通常用一個即可,默認(rèn)沒有用allowlist指定的都為不可配,反之亦然。

@gin.configurable(’supernet’, denylist=[’images’])def my_network(images, num_outputs, num_layers=3, weight_decay=1e-4): ...

其中supernet是我們指定的配置名。

3.賦值

我們使用如下兩種格式給參數(shù)賦值:

gin.bind_parameter(’configurable_name.parameter_name’, value)configurable_name.parameter_name = value

具體例子分別如下:

gin.bind_parameter(’supernet.num_layers’, 5)gin.bind_parameter(’supernet.weight_decay’, 1e-3)

supernet.num_layers = 5supernet.weight_decay = 1e-34.取值

我們可以用gin.query_parameter來取值,具體例子如下

num_layers = gin.query_parameter(’supernet.num_layers’)weight_decay = gin.query_parameter(’supernet.weight_decay’)5.配置參考文件

假如我們有以下代碼:

@gin.configurableclass DNN(object): def __init__(self, num_units=(1024, 1024)): ... def __call__(inputs, num_outputs): [email protected](denylist=[’data’])def train_model(network_fn, data, learning_rate, optimizer): ...

我們可以在gin文件里配置參數(shù):

train_model.network_fn = @DNN() # An instance of DNN is passed.train_model.optimizer = @MomentumOptimizer # The class itself is passed.train_model.learning_rate = 0.001DNN.num_units = (2048, 2048, 2048)MomentumOptimizer.momentum = 0.9

上面顯示了兩種配置參數(shù)風(fēng)格。@DNN()和@MomentumOptimizer。對于前者將會調(diào)用DNN類的實例參數(shù),且每次參數(shù)配置都會隨著每個DNN類的實例變動。對于后者將會調(diào)用類MomentumOptimizer的默認(rèn)參數(shù)。

6.使用gin文件

我們經(jīng)常會和absl下flags一起使用gin,比如下面這樣

from absl import flagsflags.DEFINE_multi_string( ’gin_file’, None, ’List of paths to the config files.’)flags.DEFINE_multi_string( ’gin_param’, None, ’Newline separated list of Gin parameter bindings.’)FLAGS = flags.FLAGS

然后主程序main.py里最先解析參數(shù):

gin.parse_config_files_and_bindings(FLAGS.gin_file, FLAGS.gin_param)

假設(shè)我們參數(shù)文件example.gin在當(dāng)前目錄下,則運行時,我們在終端輸入python main.py --gin_file=example.gin

也可以在代碼里改成這樣:

flags.DEFINE_multi_string( ’gin_file’, ['example.gin'], ’List of paths to the config files.’)

然后直接運行

6.調(diào)用其他類或函數(shù)

我們可以用下面代碼調(diào)用其他類或函數(shù)的參數(shù),甚至這個類或函數(shù)可以在其他項目里。

gin.external_configurable(tf.train.MomentumOptimizer)7.范圍限定

當(dāng)一個可配置函數(shù)在程序執(zhí)行過程中被多次調(diào)用時,可能需要為每次調(diào)用提供不同的參數(shù)綁定。Gin提供了一個范圍限定機制來促進(jìn)這一點。例如,假設(shè)我們想要實現(xiàn)一個GAN,我們必須交替訓(xùn)練一個生成器和一個鑒別器。在Tensoflow中,這最容易通過兩個優(yōu)化器來實現(xiàn),因此我們可能有這樣一個函數(shù):

gin.external_configurable(tf.train.GradientDescentOptimizer)@gin.configurable(allowlist=[’generator_optimizer’, ’discriminator_optimizer’])def gan_trainer( generator_loss, generator_vars, generator_optimizer, discriminator_loss, discriminator_vars, discriminator_optimizer): # Construct the optimizers and minimize w.r.t. the correct variables. generator_train_op = generator_optimizer().minimize( generator_loss, generator_vars) discriminator_train_op = discriminator_optimizer().minimize( discriminator_loss, discriminator_vars) ...

我們?nèi)绾螌enerator_optimizer和discriminator_optimizer都配置為@GradientDescentOptimizer,但具有不同的學(xué)習(xí)速率?下面是個錯誤示范:

# Won’t work!gan_trainer.generator_optimizer = @GradientDescentOptimizerGradientDescentOptimizer.learning_rate = 0.01gan_trainer.discriminator_optimizer = @GradientDescentOptimizer# This binding will overwrite the previous one:GradientDescentOptimizer.learning_rate = 0.001

Gin提供了一個范圍界定機制來處理這種情況。任何可配置引用的前面都可以有一個作用域名稱,用/字符與可配置名稱分開。同樣,也可以通過在可配置名稱前面加上一個范圍名稱來應(yīng)用特定于某個范圍的綁定。下面是對的示范:

# This will work! Use scoping to apply different parameter bindings.gan_trainer.generator_optimizer = @generator/GradientDescentOptimizergan_trainer.discriminator_optimizer = @discriminator/GradientDescentOptimizergenerator/GradientDescentOptimizer.learning_rate = 0.01discriminator/GradientDescentOptimizer.learning_rate = 0.0018.標(biāo)記gin參數(shù)

Gin允許您指示在Gin配置中必須提供某些參數(shù)。這可以通過兩種方式實現(xiàn):1.在函數(shù)的調(diào)用位置2.在函數(shù)的簽名中

當(dāng)調(diào)用一個可配置時,您可以通過gin.REQUIRED標(biāo)記任何arg或kwarg。所需對象:

my_network(images, gin.REQUIRED, num_layers=5, weight_decay=gin.REQUIRED)

將在調(diào)用時檢查所需參數(shù)。如果沒有為這些參數(shù)提供Gin綁定,將會引發(fā)一個錯誤,列出缺少的參數(shù)綁定以及需要它們的可配置名稱。定義可配置時,可以使用gin.REQUIRED將參數(shù)標(biāo)記為必需的:

@gin.configurabledef run_training(model_dir=gin.REQUIRED, network=gin.REQUIRED, ...): ...9.從Gin文件中導(dǎo)入模塊

import some.module.spec10.在Gin文件中調(diào)用另一個Gin文件參數(shù)

一個Gin文件可以包含其他Gin文件,這樣可以更容易地將一個配置拆分成單獨的組件(例如,一個“基礎(chǔ)”配置,它被其他派生配置包含和修改)。包含另一個Gin文件可以使用以下語法完成:

include ’path/to/another/file.gin’11.Gin “macros”

有時一個值應(yīng)該在多個綁定之間共享。為了實現(xiàn)這一點并避免多次重復(fù)該值(導(dǎo)致維護(hù)負(fù)擔(dān)),Gin提供了以下預(yù)定義的可配置功能:

@gin.configurabledef macro(value): return value

可以引用“宏”函數(shù)(通過“()”來取值)。例如:

num_layers/macro.value = 10network.num_layers = @num_layers/macro()

也可以這樣寫

num_layers = 10network.num_layers = %num_layers12.常量

gin.constant函數(shù)可用于定義常量,這些常量可通過上述宏語法訪問。例如,在Python中:

gin.constant(’THE_ANSWER’, 42)

然后在配置文件gin中

meaning.of_life = %THE_ANSWER

請注意,任何Python對象都可以用作常量的值(包括不能表示為Gin文字的對象)。值將被存儲到Gin內(nèi)部字典中,直到程序終止,因此避免創(chuàng)建具有有限生命周期的值的常數(shù)。一個消除歧義的模塊可以放在常量名稱的前面。例如:

gin.constant(’some.modules.PI’, 3.14159)13.實驗使用多個Gin文件和額外的命令行綁定

在許多情況下,可以定義多個包含實驗整體配置不同部分的Gin文件。對整體配置的額外“調(diào)整”可以通過命令行標(biāo)志作為單獨的綁定來傳遞。

一種推薦的方法是創(chuàng)建一個包含多個Gin配置的文件夾,然后創(chuàng)建一個包含以下內(nèi)容的BUILD文件:

filegroup( name = 'gin_files', srcs = glob(['*.gin']), visibility = [':internal'],)

此filegroup可用作二進(jìn)制文件中的數(shù)據(jù)依賴項:

data = ['//path/to/configs:gin_files',]

在二進(jìn)制文件中,可以定義以下標(biāo)志:

from absl import flagsflags.DEFINE_multi_string( ’gin_file’, None, ’List of paths to the config files.’)flags.DEFINE_multi_string( ’gin_param’, None, ’Newline separated list of Gin parameter bindings.’)FLAGS = flags.FLAGS

然后用Gin解析它們:

gin.parse_config_files_and_bindings(FLAGS.gin_file, FLAGS.gin_param)

最后,二進(jìn)制文件可以運行為:

.../run_gin_eval --gin_file=$CONFIGS_PATH/cartpole_balance.gin --gin_file=$CONFIGS_PATH/base_dqn.gin --gin_file=$CONFIGS_PATH/eval.gin --gin_param=’evaluate.num_episodes_eval = 10’ --gin_param=’evaluate.generate_videos = False’ --gin_param=’evaluate.eval_interval_secs = 60’

到此這篇關(guān)于python的gin庫的介紹和使用的文章就介紹到這了,更多相關(guān)python gin庫內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 免费一级毛片在线播放 | 高清欧美性狂猛bbbbbbxxxx | 91aaa免费免费国产在线观看 | 黄在线看 | 真实国产乱子伦高清 | 久久久久久久国产a∨ | 精品国产免费人成高清 | 在线视免费频观看韩国aaa | 久久曰视频 | 国产成人一区二区三区 | 伊人色综合久久成人 | 玖玖爱zh综合伊人久久 | 2022免费国产精品福利在线 | 国产一区二区三区精品视频 | 国产精品自在线天天看片 | 在线观看一级毛片 | 美女131爽爽爽做爰中文视频 | 99国产精品热久久久久久夜夜嗨 | 国产在线精品一区免费香蕉 | 亚洲成人网页 | 午夜a毛片 | 免费v片在线观看 | 一级a毛片免费观看久久精品 | 精品国产高清不卡毛片 | 成人国产在线视频在线观看 | 久久五月女厕所一区二区 | 99久久综合狠狠综合久久一区 | 成人黄网大全在线观看 | 日韩一区二区三区四区不卡 | 亚洲线精品一区二区三区 | 91无套极品外围在线播放 | 久久国产精品免费一区二区三区 | 久久精品中文字幕第一页 | 国产精品日韩欧美在线 | 长腿校花被啪到腿软视频 | 久久一区二区三区不卡 | 亚洲欧美日产综合在线看 | 男人天堂网址 | 一级欧美在线的视频 | 黄色成人毛片 | 国产精品aⅴ |