
文章插圖
如果在運(yùn)行python腳本時(shí)需要傳入一些參數(shù),例如gpus與batch_size,可以使用如下三種方式 。
python script.py 0,1,2 10python script.py -gpus=0,1,2 --batch-size=10python script.py -gpus=0,1,2 --batch_size=10123這三種格式對(duì)應(yīng)不同的參數(shù)解析方式,分別為sys.argv、argparse、 tf.app.run,前兩者是python自帶的功能,后者是tensorflow提供的便捷方式 。
小編是一名python開(kāi)發(fā)工程師,這里有我自己整理了一套最新的python系統(tǒng)學(xué)習(xí)教程,包括從基礎(chǔ)的python腳本到web開(kāi)發(fā)、爬蟲(chóng)、數(shù)據(jù)分析、數(shù)據(jù)可視化、機(jī)器學(xué)習(xí)等 。想要這些資料的可以關(guān)注小編,并在后臺(tái)私信小編:“01”即可領(lǐng)取
1.sys.argvsys模塊是很常用的模塊,它封裝了與python解釋器相關(guān)的數(shù)據(jù),例如sys.modules里面有已經(jīng)加載了的所有模塊信息,sys.path里面是PYTHONPATH的內(nèi)容,而sys.argv則封裝了傳入的參數(shù)數(shù)據(jù) 。使用sys.argv接收上面第一個(gè)命令中包含的參數(shù)方式如下:
import sysgpus = sys.argv[1]#gpus = [int(gpus.split(','))]batch_size = sys.argv[2]print(gpus)print(batch_size)1234562.argparse
import argparseparser = argparse.ArgumentParser(description='manual to this script')parser.add_argument("--gpus", type=str, default="0")parser.add_argument("--batch-size", type=int, default=32)args = parser.parse_args()print(args.gpus)print(args.batch_size)1234567需要注意的是,腳本運(yùn)行命令python script.py -gpus=0,1,2 –batch-size=10中的–batch-size會(huì)被自動(dòng)解析成batch_size.parser.add_argument方法的type參數(shù)理論上可以是任何合法的類(lèi)型,但有些參數(shù)傳入格式比較麻煩,例如list,所以一般使用bool, int, str, float這些基本類(lèi)型就行了,更復(fù)雜的需求可以通過(guò)str傳入,然后手動(dòng)解析 。bool類(lèi)型的解析比較特殊,傳入任何值都會(huì)被解析成True,傳入空值時(shí)才為False
3.tf.app.run
'''遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:778463939尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書(shū)!'''import tensorflow as tftf.app.flags.DEFINE_string('gpus', None, 'gpus to use')tf.app.flags.DEFINE_integer('batch_size', 5, 'batch size')FLAGS = tf.app.flags.FLAGSdef main(_):print(FLAGS.gpus)print(FLAGS.batch_size)if __name__=="__main__":tf.app.run()12345678910111213141516有幾點(diǎn)需要注意:
tensorflow只提供以下幾種方法:
tf.app.flags.DEFINE_string,tf.app.flags.DEFINE_integer,tf.app.flags.DEFINE_boolean,tf.app.flags.DEFINE_float 四種方法,分別對(duì)應(yīng)str, int,bool,float類(lèi)型的參數(shù) 。這里對(duì)bool的解析比較嚴(yán)格,傳入1會(huì)被解析成True,其余任何值都會(huì)被解析成False 。
腳本中需要定義一個(gè)接收一個(gè)參數(shù)的main方法:def main(_):,這個(gè)傳入的參數(shù)是腳本名,一般用不到,所以用下劃線(xiàn)接收 。
以batch_size參數(shù)為例,傳入這個(gè)參數(shù)時(shí)使用的名稱(chēng)為–batch_size,也就是說(shuō),中劃線(xiàn)不會(huì)像在argparse 中一樣被解析成下劃線(xiàn) 。
tf.app.run()會(huì)尋找并執(zhí)行入口腳本的main方法 。也只有在執(zhí)行了tf.app.run()之后才能從FLAGS中取出參數(shù) 。從它的簽名來(lái)看,它也是可以自己指定需要執(zhí)行的方法的,不一定非得叫main:
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問(wèn)題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專(zhuān)業(yè)人士給予相關(guān)指導(dǎo)!
「愛(ài)刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助:- 在卸載手機(jī)軟件后我得到了兩樣?xùn)|西 我卸載過(guò)的東西
- 國(guó)家現(xiàn)行空調(diào)安裝標(biāo)準(zhǔn)
- 關(guān)于流行語(yǔ)的議論文 急急急!馬上 速度 三秒后給我!
- 看視頻賺錢(qián)一天100 快手發(fā)視頻可以賺錢(qián)嗎
- 運(yùn)動(dòng)之后吃什么好呢?
- 飯后多長(zhǎng)時(shí)間刷牙好呢?
- 酒后吃什么好 酒后養(yǎng)胃方法
- 男人沉默的背后是什么
- 男人結(jié)婚后的神奇改變
- 情感咨詢(xún):婚后與公婆同住不方便怎么辦
