2016-02-06 42 views
6

我想在我的應用程序中設置自定義批量大小。如何在TensorFlow中使用「FLAGS」(命令行開關)?

如果我把下面的代碼到我的應用程序

tf.app.flags.DEFINE_integer('batch_size', 128, 
          """Number of images to process in a batch.""") 

它說以下錯誤

argparse.ArgumentError: argument --batch_size: conflicting option string(s): --batch_size 

,如果我刪除了這一說法,但發誓:

usage: <myscript> [-h] [--batch_size BATCH_SIZE] [--data_dir DATA_DIR] 
         [--checkpoint_dir CHECKPOINT_DIR] 

在使用FLAGS.batch_size的行。

myscript是我的腳本的名稱,我沒有在任何地方寫這個消息,也沒有期望這些命令行開關。看起來像TF使用一些Python開關解析庫,並以某種方式期待這些開關。如何避免這種情況並期望自定義開關?

如何硬編碼自定義batch_size?

UPDATE

我的命令行如下:

myscript image1.png image2.png image3.png 

的PNG從CIFAR數據庫我想在命令行識別圖像。這是我希望的命令行,我不希望它包含「usage」輸出中列出的選項。

+0

您可以添加用於運行腳本的命令行嗎? – Farseer

+0

我希望處理的圖像PNG文件列表。這就是我想要的,我不想從命令行設置'batch_size'。 – Dims

回答

10

從您的更新中,聽起來好像根本不想使用FLAGS模塊。如果你看一個節目像cifar10_train.py,你會看到下面的near the bottom of the script

def main(argv=None): # pylint: disable=unused-argument 
    # ... 

if __name__ == '__main__': 
    tf.app.run() 

tf.app.run()調用是有點樣板的是確保任何標誌被解析,然後調用main()功能在同一模塊中。請注意,main()有一個argv參數。這將填充你的程序的其餘參數:在你的例子中,它將是一個列表["image1.png", "image2.png", "image3.png"]。因此,您可以簡單地將您的main()函數寫成類似於:

def main(argv=None): 
    if argv: 
    for filename in argv: 
     run_inference_on_file(filename) 
+7

爲什麼TensorFlow有一個標誌包裝器/庫,如果python已經有一個工作正常? –

+0

在包含FLAGS的文檔中是否有任何地方? – charlesreid1

1

我懷疑你正在導入cifar10.py已經定義了batch_size標誌,並且錯誤是由於你試圖重新定義一個同名的標誌。如果您正在導入cifar10,則可以簡單地在命令行中使用--batch_size,並在代碼中使用FLAGS.batch_size

+0

爲什麼它沒有定義呢? – Dims