好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 聊聊python的gin庫的介紹和使用

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

熱門標簽:南京銷售外呼系統軟件 蓋州市地圖標注 房產電銷外呼系統 地圖制圖標注位置改變是移位嗎 地圖標注微信發送位置不顯示 315電話機器人廣告 地圖標注的意義點 浙江電銷卡外呼系統好用嗎 上海機器人外呼系統哪家好

1.簡介

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

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

安裝

pip install gin-config

2.@gin.configurable

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

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

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

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

為了確定哪些是可以配置的參數,@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.賦值

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

  1. gin.bind_parameter('configurable_name.parameter_name', value)
  2. configurable_name.parameter_name = value

具體例子分別如下:

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

4.取值

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

num_layers = gin.query_parameter('supernet.num_layers')
weight_decay = gin.query_parameter('supernet.weight_decay')

5.配置參考文件

假如我們有以下代碼:

@gin.configurable
class 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.001

DNN.num_units = (2048, 2048, 2048)
MomentumOptimizer.momentum = 0.9

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

6.使用gin文件

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

from absl import flags

flags.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_optimizerdiscriminator_optimizer都配置為@GradientDescentOptimizer,但具有不同的學習速率?
下面是個錯誤示范:

# Won't work!
gan_trainer.generator_optimizer = @GradientDescentOptimizer
GradientDescentOptimizer.learning_rate = 0.01

gan_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/GradientDescentOptimizer
gan_trainer.discriminator_optimizer = @discriminator/GradientDescentOptimizer

generator/GradientDescentOptimizer.learning_rate = 0.01
discriminator/GradientDescentOptimizer.learning_rate = 0.001

8.標記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.configurable
def run_training(model_dir=gin.REQUIRED, network=gin.REQUIRED, ...):
  ...

9.從Gin文件中導入模塊

import some.module.spec

10.在Gin文件中調用另一個Gin文件參數

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

include 'path/to/another/file.gin'

11.Gin “macros”

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

@gin.configurable
def macro(value):
  return value

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

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

也可以這樣寫

num_layers = 10
network.num_layers = %num_layers

12.常量

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 = ["http://path/to/configs:gin_files",]

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

from absl import flags

flags.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 logging日志庫空間不足問題解決
  • python GUI庫圖形界面開發之PyQt5中QWebEngineView內嵌網頁與Python的數據交互傳參詳細方法實例
  • python GUI庫圖形界面開發之PyQt5瀏覽器控件QWebEngineView詳細使用方法
  • Python中logging日志庫實例詳解
  • 在Python中使用MongoEngine操作數據庫教程實例
  • python中logging庫的使用總結
  • win系統下為Python3.5安裝flask-mongoengine 庫
  • python logging類庫使用例子
  • Python 分析Nginx訪問日志并保存到MySQL數據庫實例

標簽:日照 赤峰 雙鴨山 臨汾 貴州 陽泉 金華 克拉瑪依

巨人網絡通訊聲明:本文標題《聊聊python的gin庫的介紹和使用》,本文關鍵詞  聊聊,python,的,gin,庫,介紹,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《聊聊python的gin庫的介紹和使用》相關的同類信息!
  • 本頁收集關于聊聊python的gin庫的介紹和使用的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 国产精品伦理| 日本成年x片免费观看| 特级毛片s级全部免费| 国产日产精品久久快鸭最新版完整资源流出 | 国产做受???高潮91按摩| 腿再张大些就不疼了| 大乳美女大乳被狂揉gif| 美女裸体国产一区二区麻豆 | 中文字幕乱码中文乱码b站| 在线理伦片在线理伦片在| 男生插女生动态图| 人蛇大战色蛇女三级| 青青草国产免费久久久下载| 小短文H啪纯肉+公车APP| 97AV人妻无码视频二区| 黄色三级日韩| 《年轻女教师2》在线播放 | 成人3D无遮H漫画| 欧美日本三级| 女上男下高潮太舒服了| 丝袜美女视频| 快穿之闷骚男主喂不饱h| 1024手机看片你懂的日韩人妻澳门 | 久青草视频免费视频播放线路1| 好爽?好紧?再深一点网站| 欧美专区在线视频| 久久久精品国产sm调教网站| 亚洲日本欧美综合在线一| 男女啪啪抽搐一进一出dtt| 亚洲永久网址在线观看| 国产精品久久久久久无码情趣酒店| 欧美在线播放一区二区| 性爱视频在线播放| 日韩风俗媚娘| 露出调教放荡娇妻小说| 精品视频一区二区| 台湾50部三级| 亚洲乱码国产乱码精品天美传媒 | 黑人巨大videos极度另类| 国产女?片a归国片aa按摩| 张开腿h|