2016-02-06 15 views
6

Sto provando ad impostare la dimensione del batch personalizzato nella mia applicazione.Come utilizzare "FLAGS" (switch a riga di comando) in TensorFlow?

se ho messo il seguente codice nella mia app

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

dice il seguente errore

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

e se tolgo questa affermazione, giura:

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

a la riga in cui è stato utilizzato il numero FLAGS.batch_size.

myscript è il nome del mio script e non ho scritto questo messaggio da nessuna parte e non mi aspetto che questi switch di riga di comando vengano visualizzati. Sembra che TF utilizzi alcune librerie di analisi degli switch Python e si aspettino in qualche modo questi switch. Come evitare questo e aspettarsi switch personalizzati?

Come hardcode personalizzato batch_size?

UPDATE

La mia linea di comando è seguente:

myscript image1.png image2.png image3.png 

PNG sono le immagini dal database CIFAR vorrei riconoscere da linea di comando. Questa è la linea di comando che vorrei che fosse, non voglio che contenga le opzioni elencate nell'output di "utilizzo".

+0

Puoi aggiungere una riga di comando che usi per eseguire il tuo script? – Farseer

+0

Un elenco di file PNG immagine che desidero elaborare. Questo è quello che voglio, non voglio che 'batch_size' sia impostato dalla riga di comando. – Dims

risposta

10

Dal tuo aggiornamento, sembra che tu non voglia affatto utilizzare il modulo FLAGS. Se si guarda a un programma come cifar10_train.py, si vedrà il seguente near the bottom of the script:

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

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

Il tf.app.run() invocazione è un po 'di testo standard che assicura che tutti i flag vengono analizzati, e quindi richiama la funzione main() nello stesso modulo . Si noti che main() ha un argomento argv. Questo sarà riempito con gli argomenti rimanenti per il tuo programma: nel tuo esempio, sarà una lista ["image1.png", "image2.png", "image3.png"]. Quindi puoi semplicemente scrivere la tua funzione main() come qualcosa:

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

perché TensorFlow ha un flag wrapper/library se Python ne ha già uno che funziona bene? –

+0

Esiste in qualsiasi punto della documentazione che FLAGS è coperto? – charlesreid1

1

Ho il sospetto che stia importando cifar10.py che sia già stato definito il flag batch_size e che l'errore sia dovuto al tentativo di ridefinire un flag con lo stesso nome. Se si importa cifar10, è sufficiente utilizzare --batch_size dalla riga di comando e FLAGS.batch_size nel codice.

+0

Perché non funziona senza definizione allora? – Dims

Problemi correlati