日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

keras框架入门学习(一)——argparse传参模块调用

發(fā)布時間:2024/3/24 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 keras框架入门学习(一)——argparse传参模块调用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

keras框架入門學習(一)——argparse傳參模塊調用

  • 一、argparse模塊簡介
    • 1.1 argparse的定義
    • 1.2 argparse的優(yōu)勢
  • 二、argparse模塊使用
    • 2.1 實現(xiàn)【解析命令行讀取參數(shù)】的傳統(tǒng)方法——sys.argv
    • 2.2 實現(xiàn)【解析命令行讀取參數(shù)】的優(yōu)化方法——argparse模塊
  • 三、argparse模塊參數(shù)說明
    • 3.1 ArgumentParser 對象
    • 3.2 add_argument() 方法
    • 3.3 parse_args() 方法
    • 3.4 add_argument() 方法中參數(shù)變量的定義規(guī)則
  • 四、argparse模塊應用范例
    • 4.1 初級范例
    • 4.2 進階范例
    • 4.3 python argparse傳入布爾參數(shù)的正確做法

argparse官方教程:https://docs.python.org/3/library/argparse.html

嗨課網教程: Python argparse命令行參數(shù)解析

需求背景描述:

當我們執(zhí)行某個Python代碼,例如文件test.py時,想要傳遞一些可以隨時改變的自定義的參數(shù)。比如在訓練神經網絡時,我們?yōu)榱朔奖阈薷挠柧毜腷atch大小,epoch大小等,而不改動主代碼。此時最方便的方法就是在執(zhí)行代碼的時候從命令行傳入參數(shù)。argparse.ArgumentParser()可以很好地滿足這一需求。

一、argparse模塊簡介

1.1 argparse的定義

argparse定義: argparse是python標準庫里面用來處理命令行參數(shù)的庫,可以用來 方便地讀取命令行參數(shù)

1.2 argparse的優(yōu)勢

argparse 模塊可以讓人輕松編寫用戶友好的命令行接口。首先,程序定義它需要的參數(shù);然后,argparse 將弄清如何從 sys.argv 解析出那些參數(shù)。 argparse 模塊還會自動生成幫助和使用手冊,并在用戶給程序傳入無效參數(shù)時報出錯誤信息。此模塊是 Python 標準庫中推薦的命令行解析模塊(python 中自帶的模塊,不需要再安裝),使用時先導入模塊,利用import argparse實現(xiàn)。

二、argparse模塊使用

2.1 實現(xiàn)【解析命令行讀取參數(shù)】的傳統(tǒng)方法——sys.argv

使用 sys.argv 可以將命令行輸入的運行腳本后的參數(shù)依次讀取出來,并且讀取進來的參數(shù)默認是字符串類型。比如有個 demo.py 腳本:

import sysprint("Input argument is %s" %(sys.argv))

在 shell 中執(zhí)行,并會得到如下:

(py36) zhang@zhangdeMacBook-Air Chapter2 % Python demo.py how are you 123 >>> Input argument is ['import argparse.py', 'how', 'are', 'you', '123']

2.2 實現(xiàn)【解析命令行讀取參數(shù)】的優(yōu)化方法——argparse模塊

argparse的基本范式:

  • 創(chuàng)建解析器
    創(chuàng)建一個ArgumentParser對象,如 parser = argparse.ArgumentParser()。ArgumentParser 對象包含將命令行解析成 Python 數(shù)據(jù)類型所需的全部信息。

  • 添加參數(shù)
    通過調用add_argument()方法來給 ArgumentParser對象添加程序所需的參數(shù)信息;

  • 解析參數(shù)
    調用parse_args()來解析參數(shù)。依據(jù)的是第二步制定的規(guī)則,生成的是一個Namespace對象。在腳本中,通常 parse_args() 會被不帶參數(shù)調用,那么ArgumentParser 將默認從sys.argv來獲取命令行入參數(shù)。

  • argparse的基本范式——基本樣例

    1、創(chuàng)建解析器 parser = argparse.ArgumentParser(description='Process some integers.') """ 功能釋義: 創(chuàng)建一個 ArgumentParser 對象: """ 2、添加參數(shù) parser.add_argument('integers', metavar='N', type=int, nargs='+',help='an integer for the accumulator') parser.add_argument('--sum', dest='accumulate', action='store_const',const=sum, default=max,help='sum the integers (default: find the max)') """ 功能釋義: 本例中解析參數(shù)時將會返回一個具有 integers 和 accumulate 兩個屬性的對象。integers 屬性將是一個包含一個或多個整數(shù)的列表,而 accumulate 屬性當命令行中指定了 --sum 參數(shù)時將是 sum() 函數(shù),否則則是 max() 函數(shù)。 """ 3、解析參數(shù) parser.parse_args(['--sum', '7', '-1', '42'])輸出結果: >>> Namespace(accumulate=<built-in function sum>, integers=[7, -1, 42]) """ 功能釋義: 通過 parse_args() 方法解析參數(shù); 在腳本中,通常 parse_args() 會被不帶參數(shù)調用,而 ArgumentParser 將自動從 sys.argv 中確定命令行參數(shù)。 """

    三、argparse模塊參數(shù)說明

    3.1 ArgumentParser 對象

    ArgumentParser 基本語法:

    class argparse.ArgumentParser(prog=None, usage=None, description=None, epilog=None, parents=[], formatter_class=argparse.HelpFormatter, prefix_chars=’-’, fromfile_prefix_chars=None, argument_default=None, conflict_handler=‘error’, add_help=True, allow_abbrev=True)

    ArgumentParser 參數(shù)說明:

    • prog - 程序的名稱(默認:sys.argv[0])
    • usage - 描述程序用途的字符串(默認值:從添加到解析器的參數(shù)生成)
    • description - 在參數(shù)幫助文檔之前顯示的文本(默認值:無)
    • epilog - 在參數(shù)幫助文檔之后顯示的文本(默認值:無)
    • parents - 一個 ArgumentParser 對象的列表,它們的參數(shù)也應包含在內
    • formatter_class - 用于自定義幫助文檔輸出格式的類
    • prefix_chars - 可選參數(shù)的前綴字符集合(默認值:’-’)
    • fromfile_prefix_chars - 當需要從文件中讀取其他參數(shù)時,用于標識文件名的前綴字符集合(默認值:None)
    • argument_default - 參數(shù)的全局默認值(默認值: None)
    • conflict_handler -解決沖突選項的策略(通常是不必要的)
    • add_help - 為解析器添加一個 -h/–help 選項(默認值: True)
    • allow_abbrev - 如果縮寫是無歧義的,則允許縮寫長選項 (默認值:True)

    3.2 add_argument() 方法

    add_argument() 基本語法:

    ArgumentParser.add_argument(name or flags…[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])

    add_argument() 參數(shù)說明:

    • name or flags - 若為位置參數(shù),則需要傳入名字;若為可選參數(shù),則需要進行定義,一個命名或者一個選項字符串的列表,例如 foo 或 -f, --foo。
    • action - 定義傳入的參數(shù)如何處理,即:當參數(shù)在命令行中出現(xiàn)時使用的動作基本類型。
    • nargs - 命令行參數(shù)應當消耗的數(shù)目。
    • const - 被一些 action 和 nargs 選擇所需求的常數(shù)。

    const,一種是定義action='store_const’或action=‘append_const’時使用。一種是定義nargs=’?'時,可選項出現(xiàn)在命令行中,但之后并沒有跟隨賦值的參數(shù),作為默認值傳給此可選項。

    • default - 當參數(shù)未在命令行中出現(xiàn)時使用的值。

    如果是一個字符串,那么Parser解析的時候會將它作為命令行傳入值,使用type的值來進行轉換類型,但是如果不是的話,就會使用定義的值而不進行類型轉換。如果設置了nargs=’?‘或nargs=’*’,那么當沒有參數(shù)賦值給該項時,會使用default定義的值。而default=argparse.SUPPRESS時,則表示命令行中未出現(xiàn)某一項時,不會對它進行默認賦值。

    • type - 命令行參數(shù)應當被轉換成的類型。
    • choices - 可用的參數(shù)的容器,給定了取值范圍,超出會報錯。
    • required - 此命令行選項是否可省略 (僅選項可用)。

    默認情況下,可選項(通常前面有’-’,如:-f這樣的選項是可選的)被認為并不一定需要出現(xiàn)在命令行參數(shù)中,但是如果設置了required=True的話,則其必須出現(xiàn)在命令行參數(shù)中。(注意:此類設置應避免使用,否則運行.py文件時,default默認傳參方式失效,必須在命令行傳入相應參數(shù),否則程序報錯。

    • help - 一個此選項作用的簡單描述。
    • metavar - 在使用方法消息中使用的參數(shù)值示例。

    在Parser生成幫助信息時,需要有字符代表需要傳入的值。(這一段和dest相同,使用的就是dest的值)如果是位置參數(shù),則用它本身代替;如果是可選參數(shù),則使用它的大寫來代替。使用metavar可替換默認的字符。

    • dest - 被添加到 parse_args() 所返回對象上的屬性名。

    3.3 parse_args() 方法

    parse_args() 基本語法:

    ArgumentParser.parse_args(args=None, namespace=None)

    parse_args() 參數(shù)說明:

    • args - 要分析的字符串列表。默認值取自sys.argv。
    • namespace -獲取屬性的對象。默認值是新的空 Namespace對象。

    3.4 add_argument() 方法中參數(shù)變量的定義規(guī)則

    parser.add_argument()可配置的參數(shù)比較多,第一個是name參數(shù),也就是名稱。例如,在下面的例子中"square"就是傳遞給name的參數(shù)變量(也可以單引號的’square’),type參數(shù)指定了輸入參數(shù)的類型,int是整數(shù),float是浮點,str是字符串。

    parser.add_argument("square", help="display a square of a given number", type=int)

    name參數(shù)的書寫方式及區(qū)別:

  • 直接用自定義的name字符串,例如:‘square’或者"square"。在命令行傳入參數(shù)的時候,不需要重寫名字,直接輸入參數(shù);
  • 可以一個橫杠加name字符串,例如:’-sqaure’;
  • 可以兩個橫杠加name字符串,例如:’–square’。在命令行傳入參數(shù)的時候,需要在傳入參數(shù)的時候重寫名字+輸入參數(shù)(常見的是兩個橫杠的寫法)
  • 其中,’-n’,’–name’表示同一個參數(shù),前者為后者的別稱。最后采用對象的parse_args獲取解析的參數(shù)時,當'-'和'--'同時出現(xiàn)的時候,系統(tǒng)默認后者為參數(shù)名,前者不是,但是在命令行輸入的時候沒有這個區(qū)分。
  • default參數(shù)的調用規(guī)則:

    這里default參數(shù)用于定義沒有傳遞參數(shù)時,該參數(shù)的默認值。需要注意的是:

    • name參數(shù)用有橫杠的名稱時設置default值,命令行執(zhí)行程序的時候可以不傳入參數(shù)或者傳入部分參數(shù),沒傳入的參數(shù)使用默認值;
    • name參數(shù)用沒有橫杠的名稱時,必須傳入參數(shù)。

    action參數(shù)的調用規(guī)則:

    • action=’store_true’,表示如果我們在命令行配置這個參數(shù),則該參數(shù)為True;不配置則默認為False。
    • action=’store_false’,類比可知,表示如果我們在命令行配置這個參數(shù),則該參數(shù)為False;不配置則默認為True。
    • 配置action類型的參數(shù)不需要傳入具體的數(shù)值或者字符串,若取默認值,直接省略;若修改默認值,直接參數(shù)傳入相反bool值即可。

    典型范例參考 4.3 python argparse傳入布爾參數(shù)的正確做法

    nargs參數(shù)的調用規(guī)則:

    ArgumentParser對象通常將一個動作與一個命令行參數(shù)關聯(lián)。nargs關鍵字參數(shù)將一個動作與不同數(shù)目的命令行參數(shù)關聯(lián)在一起,實現(xiàn)傳遞多個參數(shù)的效果。

    • 當nargs不設置時,默認只能傳入一個參數(shù),輸出是一個value;

    • 當nargs為1時,有且只能傳入一個參數(shù),輸出是長度為1的列表:

    • 當nargs=N時,表示必須傳入N個參數(shù),輸出是長度為N的列表。

    • nargs=?,如果沒有在命令行中出現(xiàn)對應的項,則給對應的項賦值為default。特殊的是,對于可選項,如果命令行中出現(xiàn)了此可選項,但是之后沒有跟隨賦值參數(shù),則此時給此可選項并不是賦值default的值,而是賦值const的值。

    • nargs=*,和N類似,但是沒有規(guī)定列表長度。

    • nargs=+,和*類似,但是給對應的項當沒有傳入參數(shù)時,會報錯error: too few arguments。

    • nargs=argparse.REMAINDER,所有剩余的參數(shù),均轉化為一個列表賦值給此項,通常用此方法來將剩余的參數(shù)傳入另一個parser進行解析。如果nargs沒有定義,則可傳入參數(shù)的數(shù)量由action決定,通常情況下為一個,并且不會生成長度為一的列表。

    應用范例:

    假設有一個demo.py文件,內容如下:

    import argparse""" 該代碼首先創(chuàng)建一個ArgumentParser對象; 然后,使用parser.add_argument添加參數(shù)square。每添加一個參數(shù),就需要調用一次該方法。 最后,通過args=parser.parse_args()使代碼生效。 """parser = argparse.ArgumentParser() parser.add_argument("--none", help="display a given number", required=True, type=int) parser.add_argument('--one', nargs=1, required=True) parser.add_argument('--three', nargs=3, required=True) args = parser.parse_args()print("命令行輸入參數(shù)none為:", args.none) # 調用參數(shù)變量 print("計算命令行輸入參數(shù)none的平方:", args.none**2) # 調用參數(shù)變量,并執(zhí)行運算 print("命令行輸入參數(shù)one為:", args.one) # 調用參數(shù)變量 print("命令行輸入參數(shù)three為:", args.three) # 調用參數(shù)變量parser.print_help()

    命令行shell執(zhí)行demo.py文件,輸入參數(shù)如下:

    (py36) zhang@zhangdeMacBook-Air Chapter2 % Python demo.py --none 2 --one 3 --three 4 5 6

    打印輸出結果如下:

    命令行輸入參數(shù)none為: 2 計算命令行輸入參數(shù)none的平方: 4 命令行輸入參數(shù)one為: ['3'] 命令行輸入參數(shù)three為: ['4', '5', '6'] usage: import argparse.py [-h] --none NONE --one ONE --three THREE THREE THREEoptional arguments:-h, --help show this help message and exit--none NONE display a given number--one ONE--three THREE THREE THREE

    dest參數(shù)的調用規(guī)則:

    dest參數(shù)可以改變argparse.ArgumentParser()對應的參數(shù)調用時候的名稱。例如下面這一段:

    import argparseparser = argparse.ArgumentParser(description='Process some integers.') parser.add_argument('integers', metavar='N', type=int, nargs='+',help='an integer for the accumulator') parser.add_argument('--sum', dest='accumulate', action='store_const',const=sum, default=max,help='sum the integers (default: find the max)')args = parser.parse_args() print(args.accumulate(args.integers))

    如果第二個參數(shù)沒有dest=‘accumulate’,則在調用的時候,最后一行代碼只能是:

    print(args.sum(args.integers))

    dest參數(shù)使得它在調用的時候被改名。但要注意在命令行傳入參數(shù)的時候仍然是用name的字符串,即–-sum。

    metavar參數(shù)的調用規(guī)則:

    metavar參數(shù)只對用parser.print_help()打印參數(shù)信息的時候會有影響,并不影響程序的其他功能。例如:

    parser = argparse.ArgumentParser(description='PyTorch MNIST pruning from deep compression paper') parser.add_argument('--batch_size', type=int, default=50, help='input batch size for training (default: 50)') args = parser.parse_args() parser.print_help()

    打印結果為:

    usage: day1.py [-h] [--batch_size BATCH_SIZE]PyTorch MNIST pruning from deep compression paperoptional arguments:-h, --help show this help message and exit--batch_size BATCH_SIZEinput batch size for training (default: 50)

    假如設置metavar參數(shù):

    parser = argparse.ArgumentParser(description='PyTorch MNIST pruning from deep compression paper') parser.add_argument('--batch_size', type=int, default=50, metavar='N',help='input batch size for training (default: 50)') args = parser.parse_args() parser.print_help()

    打印結果為:

    usage: day1.py [-h] [--batch_size N]PyTorch MNIST pruning from deep compression paperoptional arguments:-h, --help show this help message and exit--batch_size N input batch size for training (default: 50)

    可見,只是改變了一些參數(shù)的顯示。

    action參數(shù)的調用規(guī)則:

    action參數(shù)取值說明:

    • action=‘store’,默認取值,保存?zhèn)魅雲?shù)。
    • action=‘store_const’,需要添加const,意味著該argument的值不從命令行輸入,而是取const的值。
    • action=‘store_true’ or action=‘store_false’,'store_const’的特殊情形,意味著const的值為True或False。
    • action=‘append’,表示傳入的值會作為一個列表的一項,意味著option可以在命令行中多次出現(xiàn)。
    • action=‘append_const’,傳入列表的項由const定義,通常用在需要多個argument將值傳入一個列表中的場景。
    • action=‘count’,輸出argument出現(xiàn)的次數(shù)。
    • action=‘help’,已默認添加。
    • action=‘version’,需要定義version,使用時輸出版本信息并退出。
      自定義,通過定義一個argparse.Action子類來實現(xiàn)。實際上,上面的這些可選項都是通過這種形式定義的。

    四、argparse模塊應用范例

    4.1 初級范例

    初級范例——定義參數(shù)變量,并調用參數(shù)變量執(zhí)行四則運算:

    import argparse""" 該代碼首先創(chuàng)建一個ArgumentParser對象; 然后,使用parser.add_argument添加參數(shù)square。每添加一個參數(shù),就需要調用一次該方法。 最后,通過args=parser.parse_args()使代碼生效。 """parser = argparse.ArgumentParser() parser.add_argument("square", help="display a square of a given number", type=int) # 定義參數(shù)變量 parser.add_argument("number", help="display a given number", type=int) args = parser.parse_args() parser.print_help() # 代碼注釋——自定義文本參數(shù),可以用來描述這個程序是做什么的print("計算命令行輸入參數(shù)的平方:", args.square**2) # 調用參數(shù)變量,并執(zhí)行運算 print("命令行輸入參數(shù)為:", args.number) # 調用參數(shù)變量

    我們在命令行輸入:

    (py36) zhang@zhangdeMacBook-Air Chapter2 % Python test.py 20 999

    可以得到輸出結果是:

    計算命令行輸入參數(shù)的平方: 400 命令行輸入參數(shù)為: 999usage: import argparse.py [-h] square numberpositional arguments:square display a square of a given numbernumber display a given numberoptional arguments:-h, --help show this help message and exit

    可以看到,通過parser.print_help()使得description中的文字也得到了輸出。

    4.2 進階范例

    初級范例——定義參數(shù)變量,并調用參數(shù)變量執(zhí)行四則運算:

    進階范例一:

    import argparsedef main():#設置一些參數(shù)# 創(chuàng)建命令行解析器句柄parser = argparse.ArgumentParser(description='自定義描述信息,本腳本執(zhí)行功能為:演示 argparse 模塊')parser.add_argument('--device', default='0,1,2,3', type=str, required=False, help='設置使用哪些顯卡')parser.add_argument('--model_config', default='config/model_config_small.json', type=str, required=False,help='選擇模型參數(shù)')parser.add_argument('--tokenizer_path', default='cache/vocab_small.txt', type=str, required=False, help='選擇詞庫')parser.add_argument('--raw_data_path', default='data/train.json', type=str, required=False, help='原始訓練語料')parser.add_argument('--tokenized_data_path', default='data/tokenized/', type=str, required=False,help='tokenized語料存放位置')parser.add_argument('--raw', action='store_true', help='是否先做tokenize')parser.add_argument('--epochs', default=5, type=int, required=False, help='訓練循環(huán)')parser.add_argument('--batch_size', default=8, type=int, required=False, help='訓練batch size')parser.add_argument('--lr', default=1.5e-4, type=float, required=False, help='學習率')parser.add_argument('--warmup_steps', default=2000, type=int, required=False, help='warm up步數(shù)')parser.add_argument('--log_step', default=1, type=int, required=False, help='多少步匯報一次loss,設置為gradient accumulation的整數(shù)倍')parser.add_argument('--stride', default=768, type=int, required=False, help='訓練時取訓練數(shù)據(jù)的窗口步長')parser.add_argument('--gradient_accumulation', default=1, type=int, required=False, help='梯度積累')parser.add_argument('--fp16', action='store_true', help='混合精度')parser.add_argument('--fp16_opt_level', default='O1', type=str, required=False)parser.add_argument('--max_grad_norm', default=1.0, type=float, required=False)parser.add_argument('--num_pieces', default=100, type=int, required=False, help='將訓練語料分成多少份')parser.add_argument('--min_length', default=128, type=int, required=False, help='最短收錄文章長度')parser.add_argument('--output_dir', default='model/', type=str, required=False, help='模型輸出路徑')parser.add_argument('--pretrained_model', default='', type=str, required=False, help='模型訓練起點路徑')parser.add_argument('--writer_dir', default='tensorboard_summary/', type=str, required=False, help='Tensorboard路徑')parser.add_argument('--segment', action='store_true', help='中文以詞為單位')parser.add_argument('--bpe_token', action='store_true', help='subword')parser.add_argument('--encoder_json', default="tokenizations/encoder.json", type=str, help="encoder.json")parser.add_argument('--vocab_bpe', default="tokenizations/vocab.bpe", type=str, help="vocab.bpe")args = parser.parse_args()print('args:\n' + args.__repr__())#設置完后接下來可以使用這些參數(shù)if args.segment:from tokenizations import tokenization_bert_word_level as tokenization_bertelse:from tokenizations import tokenization_bertos.environ["CUDA_VISIBLE_DEVICES"] = args.device # 此處設置程序使用哪些顯卡 ----------------------------------- required - 必需參數(shù),通常-f這樣的選項是可選的,但是如果required=True那么就是必須的了 

    進階范例二:

    import argparseif __name__ == '__main__':# 創(chuàng)建命令行解析器句柄parser = argparse.ArgumentParser(description='自定義描述信息,本腳本執(zhí)行功能為:演示 argparse 模塊')# 沒有橫桿開頭的是必填參數(shù),并且按照輸入順序進行設定parser.add_argument('positionArg',help='定義必選參數(shù) positionArg(help 屬性為提示信息)')# --verbosity1:兩個橫線 -- 開頭,指的是變量名或者稱為標簽# -v1:一個橫線 - 開通,指的是變量的別名或者標簽別名parser.add_argument('--verbosity1', '-v1', help='定義可選參數(shù) verbosity1') # 定義可選參數(shù) state# 設定 action='store_true' 表示該選項不需要接收參數(shù)# 若不設 action,則默認是需要接收參數(shù)的,否則會報錯parser.add_argument('--state', '-s', action='store_true', help='若有 "-s" ,則 state = Ture,否則 state = False')# 執(zhí)行參數(shù)的類型parser.add_argument('-int','-i', type=int, help='指定參數(shù)類型(默認是 str)')parser.add_argument('-c', help='設置參數(shù)的可選值,即輸入值必須為 choices 列表中的某個值,若未設置則默認值為 None',choices=['one', 'two', 'three', 'four'],)parser.add_argument('--default','-d', help='default 可以設置默認值',choices=['one', 'two', 'three', 'four'],default = 'one',)# 參數(shù)是否必填,使用 required 屬性parser.add_argument('--required','-r', help='required 的值為:True 或者 False',required=True,)# 最后:獲取、解析參數(shù)的值args = parser.parse_args() # 返回一個命名空間print(args)params = vars(args) # 返回字典print(params,type(params)) 在 shell 命令行中輸入: > python .demo2.py start -v1 10 -s -r helloworld Namespace(c=None, default='one', int=None, positionArg='start', required='helloworld', state=True, verbosity1='10') {'positionArg': 'start', 'verbosity1': '10', 'state': True, 'int': None, 'c': None, 'default': 'one', 'required': 'helloworld'} <class 'dict'> 查看幫助:-h 或者 -help,如:> python demo.py -h

    在 shell 命令行中輸入:

    > python .demo2.py start -v1 10 -s -r helloworld Namespace(c=None, default='one', int=None, positionArg='start', required='helloworld', state=True, verbosity1='10') {'positionArg': 'start', 'verbosity1': '10', 'state': True, 'int': None, 'c': None, 'default': 'one', 'required': 'helloworld'} <class 'dict'>

    參考鏈接:python 3 之 Argparse 模塊簡介【實現(xiàn)解析命令行讀取參數(shù)】

    進階范例三:

    import argparsedef main():parser = argparse.ArgumentParser(description="Demo of argparse")parser.add_argument('-n','--name', default=' Li ')parser.add_argument('-y','--year', default='20')parser.add_argument("-d", "--dataset", default="./dataset",help="path to input dataset of images")args = parser.parse_args()print("傳遞參數(shù):",args)name = args.nameyear = args.yearprint('Hello {} {}'.format(name,year))if __name__ == '__main__':main()輸出結果: >>> 傳遞參數(shù): Namespace(dataset='./dataset', name=' Li ', year='20') Hello Li 20 #coding=utf-8 import argparse import sysdef parse_args():parser = argparse.ArgumentParser(description='Train a Fast R-CNN network')parser.add_argument('--cfg', dest='cfg_file',help='optional config file',default=None, type=str)parser.add_argument('--weight', dest='weight',help='initialize with pretrained model weights',type=str)parser.add_argument('--imdb', dest='imdb_name',help='dataset to train on',default='voc_2007_trainval', type=str)parser.add_argument('--imdbval', dest='imdbval_name',help='dataset to validate on',default='voc_2007_test', type=str)parser.add_argument('--iters', dest='max_iters',help='number of iterations to train',default=70000, type=int)parser.add_argument('--tag', dest='tag',help='tag of the model',default=None, type=str)parser.add_argument('--net', dest='net',help='vgg16, res50, res101, res152, mobile',default='res50', type=str)parser.add_argument('--set', dest='set_cfgs',help='set config keys', default=None,nargs=argparse.REMAINDER) if len(sys.argv) == 1:print("打印help參數(shù):")parser.print_help()#sys.exit(1) # exit(1):有錯誤退出args = parser.parse_args()return argsif __name__ == '__main__':args = parse_args()print("傳入參數(shù):",args)

    將以上代碼保存為test_argparse.py ,然后在命令行輸入:python test_argparse.py

    打印help參數(shù): usage: test_argparse.py [-h] [--cfg CFG_FILE] [--weight WEIGHT][--imdb IMDB_NAME] [--imdbval IMDBVAL_NAME][--iters MAX_ITERS] [--tag TAG] [--net NET][--set ...]Train a Fast R-CNN networkoptional arguments:-h, --help show this help message and exit--cfg CFG_FILE optional config file--weight WEIGHT initialize with pretrained model weights--imdb IMDB_NAME dataset to train on--imdbval IMDBVAL_NAMEdataset to validate on--iters MAX_ITERS number of iterations to train--tag TAG tag of the model--net NET vgg16, res50, res101, res152, mobile--set ... set config keys 傳入參數(shù): Namespace(cfg_file=None, imdb_name='voc_2007_trainval', imdbval_name='voc_2007_test', max_iters=70000, net='res50', set_cfgs=None, tag=None, weight=None)***Repl Closed***

    在命令行輸入:

    python test_argparse.py --weight data/imagenet_weights/vgg16.ckpt \--imdb voc_2007_trainval \--imdbval voc_2007_test \--iters 7000 \--cfg experiments/cfgs/vgg16.yml \--net vgg16 \--set ANCHOR_SCALES "[8,16,32]" ANCHOR_RATIOS "[0.5,1,2]" TRAIN.STEPSIZE "[50000]"

    結果為:

    傳入參數(shù):Namespace(cfg_file='experiments/cfgs/vgg16.yml',imdb_name='voc_2007_trainval',imdbval_name='voc_2007_test', max_iters=7000, net='vgg16', set_cfgs=['ANCHOR_SCALES', '[8,16,32]', 'ANCHOR_RATIOS', '[0.5,1,2]', 'TRAIN.STEPSIZE', '[50000]'], tag=None, weight='data/imagenet_weights/vgg16.ckpt')

    參考鏈接:python入門:argparse淺析 nargs=’+'作用

    4.3 python argparse傳入布爾參數(shù)的正確做法

    問題描述:

    # test.py import argparsedef test_bool():parser = argparse.ArgumentParser(description="This code is used to test bool value.")parser.add_argument("--flag",type=bool,default=True)args = parser.parse_args()print("# The type of flag: ", type(args.flag))print(args.flag is False)if args.flag:print(f"# Flag: {True}")else:print(f"# Flag: {False}")if __name__ == '__main__':test_bool()

    執(zhí)行上面的代碼:python3 test.py --flag False
    按照執(zhí)行的期望是輸出# Flag: False,但是實際輸出的結果是True。

    (py36) zhangMacBook-Air Chapter2 % Python import\ argparse.py --flag False # The type of flag: <class 'bool'> False # Flag: True

    為什么會出現(xiàn)這種情況呢?因為,在命令行的輸入會被python認為是字符串,并不是布爾類型。

    解決方法:

    更改代碼為:

    # *** parser.add_argument("--flag",action="store_true",help="Run or not.") # ***

    這樣的話,當你不輸入–flag的時候,默認為False;輸入–flag的時候,才會觸發(fā)True值。
    看執(zhí)行結果:

    (data_parse) ~/Desktop/code/cython&numba  python3 test.py # The type of flag: <class 'bool'> True # Flag: False (data_parse) ~/Desktop/code/cython&numba  python3 test.py --flag # The type of flag: <class 'bool'> False # Flag: True

    當然這種方式,你也可以指定action為store_false,不輸入的時候–flag默認True,輸入–flag觸發(fā)False。

    參考鏈接:
    python argparse傳入布爾參數(shù)不生效解決
    Python3學習總結——argparse.ArgumentParser()
    命令行傳遞參數(shù) argparse.ArgumentParser解析

    總結

    以上是生活随笔為你收集整理的keras框架入门学习(一)——argparse传参模块调用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。