TensorFlow `mnist_softmax.py` 解析1

在執(zhí)行mnist_softmax.py文件時,實際運行的是最下方的這一段代碼:

if __name__ == '__main__':
  parser = argparse.ArgumentParser()
  parser.add_argument('--data_dir', type=str, default='inputdata',
                      help='Directory for storing input data')
  FLAGS, unparsed = parser.parse_known_args()
  tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)

下面分別對此段代碼進行解析

1 關(guān)于__main__

這里使用了Python程序中常用的一個技巧。即使用if __name__ == '__main__': 來使得該程序既可以獨立運行,又可以作為模塊被其它程序?qū)搿?/p>

python中if __name__ == '__main__': 的解析 鏈接

當(dāng)你打開一個.py文件時,經(jīng)常會在代碼的最下面看到if __name__ == '__main__':,現(xiàn)在就來介 紹一下它的作用.
python中每個.py文件是一個模塊,也是一個對象,并且所有的模塊都有一個內(nèi)置屬性 __name__。一個模塊的__name__ 的值取決于您如何應(yīng)用模塊。

  1. 如果 import 一個模塊,那么模塊__name__ 的值通常為模塊文件名(不帶路徑或者文件擴展名)。

  2. 但是您也可以像一個標(biāo)準(zhǔn)的程序樣直接運行模塊,在這 種情況下,__name__ 的值將是一個特別缺省"__main__"

簡言之:

  • 在cmd或者spyder 中直接運行mnist_softmax.py文件,則__name__的值是'__main__';
  • 而在其它代碼中使用 import mnist_softmax 來導(dǎo)入該文件(模塊), 則__name__的值就是'mnist_softmax'了.
  • if __name__ == '__main__'來判斷是否是在直接運行該.py文件。

2 關(guān)于parser

代碼中這兩行給此程序增加了處理命令行參數(shù)的功能,是用來處理程序的輸入?yún)?shù)的。

  parser = argparse.ArgumentParser()
  parser.add_argument('--data_dir', type=str, default='inputdata',
                      help='Directory for storing input data')

即:在Anaconda命令行或者系統(tǒng)的cmd中運行該程序時,可以加上目錄參數(shù)--data-dir= '目錄名稱'用以指定數(shù)據(jù)的存放目錄。運行時也可以不加該參數(shù),這樣該參數(shù)就取默認值default='inputdata'

而代碼中下一行

 FLAGS, unparsed = parser.parse_known_args()

是將得到的參數(shù)賦值給 FLAGS。經(jīng)過這個語句 FLAG.data_dir 中就存放了目錄的參數(shù)。

舉例說明:如果cmd中運行

python mnist_softmax.py --data-dir="Data"

則FLAGS.data_dir = 'Data' 。該程序會在當(dāng)前目錄下的“Data”文件夾下尋找MNIST數(shù)據(jù)文件。

當(dāng)然如果不加參數(shù)的運行,也可以。即如果cmd中運行

python mnist_softmax.py

則程序就使用默認值default='inputdata'。FLAGS.data_dir = 'inputdata'

3 關(guān)于 tf.app.run

tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)
此段代碼不需要知道太多。只要知道,這個就是用來調(diào)用并運行代碼中定義的main函數(shù)def main(_): 的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,969評論 19 139
  • 一.目的 類似學(xué)習(xí)開發(fā)語言的第一個代碼,Hello World! 機器學(xué)習(xí)中,我們通過MNIST來學(xué)習(xí)手寫輸入法的...
    Coming0524閱讀 6,535評論 2 8
  • 一、溫故而知新 1. 內(nèi)存不夠怎么辦 內(nèi)存簡單分配策略的問題地址空間不隔離內(nèi)存使用效率低程序運行的地址不確定 關(guān)于...
    SeanCST閱讀 7,880評論 0 27
  • 眾所周知韓信是通過鉆石奪寶獲得的 現(xiàn)在是S8賽季剛開始。今天贈送的獎勵有一張 鉆石奪寶抵用券 這個券可以免費奪寶一...
    鋤禾圈閱讀 1,051評論 1 0
  • 文集《迷人的力量》 作者簡介 作者:王殿波 70后追夢人一枚。 1997年因車禍高位截癱。 學(xué)習(xí)寫作希望能夠靠寫作...
    王殿波閱讀 557評論 5 3