python argvparser_Python ArgumentParse的subparser用法說明

在寫一些很小的機器學習項目的時候,我們往往希望training, testing和inference能共用一個入口main,但是不同的功能使用不同的input參數.當然如果三個功能對應三個.py腳本問題也不大,但是畢竟覺得不太優雅.這個時候就需要考慮如何讓代碼更加簡單有條理.

主要是最近在看parser有關的東西,所以看到了一個項目,里面的使用subparser的地方是值得借鑒的,下面附上代碼和部分自己的一些見解

def main():

parser = argparse.ArgumentParser()

subparsers = parser.add_subparsers()

hparams = make_hparams()

# 這個函數是直接寫了一些超參數,講真我不太喜歡這個操作,個人還是比較傾向用一個額外的config文件來存儲

# 這些超參,這樣輸入的只要是config文件的路徑即可;主要是這么做可以看到自己每一步的參數是怎么設置的

# 便于后期出現了問題來排錯

subparser = subparsers.add_parser("train")

# add subparser here

subparser.set_defaults(callback=lambda args: run_train(args, hparams))

# 加上callback選項,run_train是前期定義的一個函數,這條和后面的args.callback(args)對應

hparams.populate_arguments(subparser)

# 這里就是作者自己定義的一個函數,本質其實還是一系列的add_argument

subparser.add_argument("--numpy-seed", type=int)

subparser.add_argument("--model-path-base", required=True)

subparser.add_argument("--evalb-dir", default="EVALB/")

subparser.add_argument("--train-path", default="data/02-21.10way.clean")

subparser.add_argument("--dev-path", default="data/22.auto.clean")

subparser.add_argument("--batch-size", type=int, default=250)

subparser.add_argument("--subbatch-max-tokens", type=int, default=2000)

subparser.add_argument("--eval-batch-size", type=int, default=100)

subparser.add_argument("--epochs", type=int)

subparser.add_argument("--checks-per-epoch", type=int, default=4)

subparser.add_argument("--print-vocabs", action="store_true")

subparser = subparsers.add_parser("test")

subparser.set_defaults(callback=run_test)

subparser.add_argument("--model-path-base", required=True)

subparser.add_argument("--evalb-dir", default="EVALB/")

subparser.add_argument("--test-path", default="data/23.auto.clean")

subparser.add_argument("--test-path-raw", type=str)

subparser.add_argument("--eval-batch-size", type=int, default=100)

subparser = subparsers.add_parser("ensemble")

subparser.set_defaults(callback=run_ensemble)

subparser.add_argument("--model-path-base", nargs='+', required=True)

subparser.add_argument("--evalb-dir", default="EVALB/")

subparser.add_argument("--test-path", default="data/22.auto.clean")

subparser.add_argument("--eval-batch-size", type=int, default=100)

subparser = subparsers.add_parser("parse")

subparser.set_defaults(callback=run_parse)

subparser.add_argument("--model-path-base", required=True)

subparser.add_argument("--input-path", type=str, required=True)

subparser.add_argument("--output-path", type=str, default="-")

subparser.add_argument("--eval-batch-size", type=int, default=100)

subparser = subparsers.add_parser("viz")

subparser.set_defaults(callback=run_viz)

subparser.add_argument("--model-path-base", required=True)

subparser.add_argument("--evalb-dir", default="EVALB/")

subparser.add_argument("--viz-path", default="data/22.auto.clean")

subparser.add_argument("--eval-batch-size", type=int, default=100)

args = parser.parse_args()

args.callback(args)

補充知識:python 學習筆記--argparse模塊以及parse_known_args()函數

代碼test.py:

import argparse

import sys

parse=argparse.ArgumentParser()

parse.add_argument("--learning_rate",type=float,default=0.01,help="initial learining rate")

parse.add_argument("--max_steps",type=int,default=2000,help="max")

parse.add_argument("--hidden1",type=int,default=100,help="hidden1")

flags,unparsed=parse.parse_known_args(sys.argv[1:])

print flags.learning_rate

print flags.max_steps

print flags.hidden1

print unparsed

運行

python test.py --learning_rate 20 --max_steps 10 --hidden1 100 --arg_int 2

其效果等同于

python test.py --learning_rate=20 --max_steps=10 --hidden1=100 --arg_int=2

輸出:

20.0

10

100

['--arg_int', '2']

flags為namespace空間,結果是Namespace(hidden1=100, learning_rate=20.0, max_steps=10),包含程序定義了的命令行參數,而unparsed為程序沒有定義的命令行參數。

以上這篇Python ArgumentParse的subparser用法說明就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持我們。

本文標題: Python ArgumentParse的subparser用法說明

本文地址: http://www.cppcns.com/jiaoben/python/308763.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/528911.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/528911.shtml
英文地址,請注明出處:http://en.pswp.cn/news/528911.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python生成器函數(generator),python3學習筆記:生成器generator

簡單了解下生成器generator,主要是yield的返回值和send的傳參,記錄下。生成器的基本屬性generator 函數 yield簡單說,就是一個函數,里面用到了關鍵字yield,就成為了一個生成器生成器和函數的不同主要在于&#xff1a…

復旦微電子fpga數據手冊_專注FPGA圖像加速領域 深維科技跨入發展快車道

日前,在2019賽靈思開發者大會(美洲站)上,深維科技正式面向全球發布ThunderImage三款重磅圖像加速產品:全球最快的JPEG2JPEG縮略圖方案、超高性能的JPEG2WebP轉碼方案及世界級超高密度算力的JPEG2JPEG縮略圖方案。新產品一經發布立即“技驚”四…

oracle Blob保存方式,關于文件保存到Oracle中BLOB字段的方法及例子

關于文件保存到Oracle中BLOB字段的方法及例子-------------------------------------------public class FileOpClass{public static byte[] GetFileStream(string filepath){byte[] byteArray null;FileStream fs null;try{fs new FileStream(filepath, FileMode.Open);lon…

python 調c++生成的dll 中識別char *_基于tensorflow 實現端到端的OCR:二代身份證號識別...

最近在研究OCR識別相關的東西,最終目標是能識別身份證上的所有中文漢字數字,不過本文先設定一個小目標,先識別定長為18的身份證號,當然本文的思路也是可以復用來識別定長的驗證碼識別的。 本文實現思路主要來源于Xlvector的博客&a…

php友價商城手游,2019年T5友價商城網站程序-偽靜態規則

# Version 3.1.0.73RewriteEngine on#RewriteBase /RewriteRule vip(.*) /shop/view.php?str$1RewriteRule ^(.*)/search(.*).html /$1/index.php?str$2RewriteRule ^(.*)/goods([0-9]*).html /$1/goods.php?id$2RewriteRule ^(.*)/(.*)list(.*).html /$1/$2list.php?str$3…

oracle 的跨天查詢,考勤跨天如何統計 - Oracle開發 - ITPUB論壇-中國專業的IT技術社區...

本帖最后由 yaksha1 于 2020-9-11 17:29 編輯請問下,目前正在統計每個人每天考勤數據是否正常,上班打一次卡,下班打一次卡,算是正常。打卡情況大致分兩種,一種是正常白班,朝九晚五,一種是跨天&a…

php程序員學什么語言好就業_2019年初中畢業生學什么專業好?學什么專業好就業?...

前言:據了解,目前我國職業人才缺口較大,市場供需不平衡。許多學生往往還沒畢業,就已經與企業簽訂了就業協議。因此,有許多家長愿意把小孩子送到專業學校進行就讀。畢竟可以學的一門好專業,對學生將來的路是…

中print中加f_Python3中的格式化輸出

Python3字符串格式化輸出有兩種形式實現:a:字符串格式化表達式: ...%... % (values)b:字符串格式化方法調用:...{}....format(values) 或者 f...{xx}...1:字符串格式化的類型碼(typecode)(表1)2: 字符串格式化表達式格…

Json-ServerMockJs簡單快速生成測試數據

Json-Server&MockJs簡單快速生成測試數據 1、Json-Server 和 MockJs的安裝 npm install -g json-server //全局安裝2、創建目錄和初始話 例如:創建D:\ProjectOne文件夾 3、打開終端或者powershell進入ProjectOne文件夾 4、初始化項目 npm init5、安裝Mock…

oracle索引sys_nc,通過dba_ind_columns表查到索引所在列的名字為SYS_NC00133$

使用下面的腳本查看表上索引相關信息:selectind.uniqueness uniq,ind.owner||.||col.index_name indname,col.column_name colnamefromdba_ind_columns col,dba_indexes indwhereind.owner upper(&ixowner)andind.table_name upper(&tabname)andcol.index…

oracle nvl和coalesce,NVL與Coalesce之間的Oracle差異

慕碼人8056858COALESCE是更現代的功能,是ANSI-92標準的一部分。NVL在Oracle具體的,它在推出80的前存在任何標準。在兩個值的情況下,它們是同義詞。但是,它們的實現方式不同。NVL總是計算兩個參數,同時COALESCE通常在找…

安卓簽名生成工具_ios app如何進行內測?ios app和安卓app的內測有何區別?

目前手機主流的操作系統分為Android和iOS兩大陣營,分別是由谷歌和蘋果進行開發維護。這兩大平臺的應用都相互獨立,無論是運行機制還是底層原理,都不一樣,所以即使是同一款App也是需要針對在兩大平臺上分別進行內測和運營、發布。那…

cx oracle dpi 1002,cx_Oracle連接數據庫總結

python中連接oracle數據庫使用第三方庫文件cx_Oracle時遇到了各種問題,網上查找資料調試了幾天才弄好,下面是不斷調試后總結的一些經驗。1.oracle客戶端(Oracle Instant Client)版本需要和操作系統版本位數相同,同時cx_Oracle官方文檔(http:/…

虛擬機python建站_搭建本地虛擬服務器linux(CentOS 7)的python虛擬環境(Hyper-V演示)...

新建虛擬機->安裝CentOS7->新建虛擬交換機:內部網絡->CentOS7設置->網絡適配器:虛擬交換機:新建虛擬交換機->進入CentOS#cd /etc/sysconfig/network-scripts/#ls -a#vi ifcfg-eth0 #(有些系統不是eth0,前面ifcfg-的…

matlab 輸入日期,matlab輸入年月日算一年中的第幾天.doc

matlab輸入年月日算一年中的第幾天clc,clear all,close alldisp This program calculates the day of year given the ;disp current date. ;month input Enter current month 1-12 : ;day input Enter current day 1-31 : ;year input Enter current year yyyy : ;%Check for …

深拷貝的缺點_拷貝?還傻傻分不清深淺?

「引言」?臣聞求木之長者,必固其根本;欲流之遠者,必浚其泉源。---- 魏征 《諫太宗十思疏》?或許你會問到,網上已經把深淺拷貝(算一個面試的高頻考點了吧)的文章都快寫爛了,為什么自己還要重新操刀寫一遍呢&#xff0…

php 失去 焦點 另一個表單獵取值,同一表單如何根據某一個文本框的值 改變另一個文本框的值...

我用的是失去焦點,然后后臺查詢到了數據,返回回來顯示不了!!$(document).ready(function(){$("#card").blur(function(){var card$("#card").val();if(card!""){$.get("{:U(guoye/yanzheng)}&…

實現文件中名詞的統計計數_通過勤哲EXCEL和Excel中的rank函數實現排名統計

如今,信息化已成為各行業企業轉型和發展的關鍵所在,信息化技術最明顯的特點是企業不同部門的人在信息技術的支撐下,可以利用豐富的資源與工具展開協作學習,在相對自由的模式和環境下,改變傳統設計相對局限、固定思維的…

php 選擇 出現列表,php – 如何從加權列表中選擇4個唯一項?

所以我有一個加權項目列表,我想從這個列表中選擇4個非重復項目.Item WeightApple 5Banana 7Cherry 12...Orange 8Pineapple 50最有效的方法是什么?我最初的嘗試是,如果一個已經被選中的項目出現的話,只需重新選擇隨后的選秀權……但是對于一個小名單,這可能會導致大…

安徽關節式焊接機器人_上下料機器人的重要性體現在哪里?它有哪些優勢?

上下料機器人是工業機器人家族中從事加工應用的重要成員之一,能滿足“快速、大批量加工節拍”、“節省人力成本”、“提高生產效率”等要求,成為越來越多中心企業的理想選擇。那么,上下料機器人有哪些特征和優勢?企業主應該如何選…