电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

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

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

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

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

安裝

pip install gin-config2.@gin.configurable

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

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

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

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

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

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

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

3.賦值

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

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): ...@gin.configurable(denylist=[’data’])def train_model(network_fn, data, learning_rate, optimizer): ...

我們可以在gin文件里配置參數:

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

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

6.使用gin文件

我們經常會和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里最先解析參數:

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

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

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

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

然后直接運行

6.調用其他類或函數

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

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

當一個可配置函數在程序執行過程中被多次調用時,可能需要為每次調用提供不同的參數綁定。Gin提供了一個范圍限定機制來促進這一點。例如,假設我們想要實現一個GAN,我們必須交替訓練一個生成器和一個鑒別器。在Tensoflow中,這最容易通過兩個優化器來實現,因此我們可能有這樣一個函數:

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) ...

我們如何將generator_optimizer和discriminator_optimizer都配置為@GradientDescentOptimizer,但具有不同的學習速率?下面是個錯誤示范:

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

# 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.標記gin參數

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

當調用一個可配置時,您可以通過gin.REQUIRED標記任何arg或kwarg。所需對象:

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

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

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

import some.module.spec10.在Gin文件中調用另一個Gin文件參數

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

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

有時一個值應該在多個綁定之間共享。為了實現這一點并避免多次重復該值(導致維護負擔),Gin提供了以下預定義的可配置功能:

@gin.configurabledef macro(value): return value

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

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

也可以這樣寫

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

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

gin.constant(’THE_ANSWER’, 42)

然后在配置文件gin中

meaning.of_life = %THE_ANSWER

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

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

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

一種推薦的方法是創建一個包含多個Gin配置的文件夾,然后創建一個包含以下內容的BUILD文件:

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

此filegroup可用作二進制文件中的數據依賴項:

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

在二進制文件中,可以定義以下標志:

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)

最后,二進制文件可以運行為:

.../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’

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

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 制丸机,小型中药制丸机,全自动制丸机价格-甘肃恒跃制药设备有限公司 | 浙江宝泉阀门有限公司 | 顶空进样器-吹扫捕集仪-热脱附仪-二次热解吸仪-北京华盛谱信仪器 | 压力变送器-上海武锐自动化设备有限公司 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库 | 山东led显示屏,山东led全彩显示屏,山东LED小间距屏,临沂全彩电子屏-山东亚泰视讯传媒有限公司 | 耐酸碱胶管_耐腐蚀软管总成_化学品输送软管_漯河利通液压科技耐油耐磨喷砂软管|耐腐蚀化学软管 | 回转窑-水泥|石灰|冶金-巩义市瑞光金属制品有限责任公司 | 桨叶搅拌机_螺旋挤压/方盒旋切造粒机厂家-无锡市鸿诚输送机械有限公司 | 不发火防静电金属骨料_无机磨石_水泥自流平_修补砂浆厂家「圣威特」 | 耐腐蚀泵,耐腐蚀真空泵,玻璃钢真空泵-淄博华舜耐腐蚀真空泵有限公司 | 吸污车_吸粪车_抽粪车_电动三轮吸粪车_真空吸污车_高压清洗吸污车-远大汽车制造有限公司 | 双舌接地线-PC68数字式高阻计-ZC36|苏海百科 | 纯化水设备-EDI-制药-实验室-二级反渗透-高纯水|超纯水设备 | 地磅-地秤-江阴/无锡地磅-江阴天亿计量设备有限公司_ | 杭州成人高考_浙江省成人高考网上报名 | 3d打印服务,3d打印汽车,三维扫描,硅胶复模,手板,快速模具,深圳市精速三维打印科技有限公司 | 电主轴,车床电磨头,变频制动电机-博山鸿达特种电机 | 北京模型公司-军事模型-工业模型制作-北京百艺模型沙盘公司 | 回转窑-水泥|石灰|冶金-巩义市瑞光金属制品有限责任公司 | 福州时代广告制作装饰有限公司-福州广告公司广告牌制作,福州展厅文化墙广告设计, | 锂电池生产厂家-电动自行车航模无人机锂电池定制-世豹新能源 | 电机保护器-电动机综合保护器-浙江开民| 大立教育官网-一级建造师培训-二级建造师培训-造价工程师-安全工程师-监理工程师考试培训 | 在线钠离子分析仪-硅酸根离子浓度测定仪-油液水分测定仪价格-北京时代新维测控设备有限公司 | 安徽控制器-合肥船用空调控制器-合肥家电控制器-合肥迅驰电子厂 安徽净化板_合肥岩棉板厂家_玻镁板厂家_安徽科艺美洁净科技有限公司 | 贵州科比特-防雷公司厂家提供贵州防雷工程,防雷检测,防雷接地,防雷设备价格,防雷产品报价服务-贵州防雷检测公司 | 标准件-非标紧固件-不锈钢螺栓-非标不锈钢螺丝-非标螺母厂家-三角牙锁紧自攻-南京宝宇标准件有限公司 | 成都亚克力制品,PVC板,双色板雕刻加工,亚克力门牌,亚克力标牌,水晶字雕刻制作-零贰捌广告 | 北京公积金代办/租房发票/租房备案-北京金鼎源公积金提取服务中心 | 我爱古诗词_古诗词名句赏析学习平台 | 电采暖锅炉_超低温空气源热泵_空气源热水器-鑫鲁禹电锅炉空气能热泵厂家 | 天助网 - 中小企业全网推广平台_生态整合营销知名服务商_天助网采购优选 | 振动时效_振动时效仪_超声波冲击设备-济南驰奥机电设备有限公司 北京宣传片拍摄_产品宣传片拍摄_宣传片制作公司-现像传媒 | 消防泵-XBD单级卧式/立式消防泵-上海塑泉泵阀(集团)有限公司 | 避光流动池-带盖荧光比色皿-生化流动比色皿-宜兴市晶科光学仪器 东莞爱加真空科技有限公司-进口真空镀膜机|真空镀膜设备|Polycold维修厂家 | 超声波清洗机-超声波清洗设备定制生产厂家 - 深圳市冠博科技实业有限公司 | 真空泵厂家_真空泵机组_水环泵_旋片泵_罗茨泵_耐腐蚀防爆_中德制泵 | 证券新闻,热播美式保罗1984第二部_腾讯1080p-仁爱影院 | 金联宇电缆|广东金联宇电缆厂家_广东金联宇电缆实业有限公司 | 广州冷却塔维修厂家_冷却塔修理_凉水塔风机电机填料抢修-广东康明节能空调有限公司 |