TensorFlow 的 Argparse 错误 cifar10.py

Argparse error with TensorFlow's cifar10.py

当我 运行 python cifar10.py:

时出现以下错误

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

这是 运行 的完整输出,包括完整的跟踪:

I tensorflow/stream_executor/dso_loader.cc:101] successfully opened CUDA library libcublas.so.7.0 locally                          
I tensorflow/stream_executor/dso_loader.cc:101] successfully opened CUDA library libcudnn.so.6.5 locally                           
I tensorflow/stream_executor/dso_loader.cc:101] successfully opened CUDA library libcufft.so.7.0 locally                           
I tensorflow/stream_executor/dso_loader.cc:101] successfully opened CUDA library libcuda.so locally                                
I tensorflow/stream_executor/dso_loader.cc:101] successfully opened CUDA library libcurand.so.7.0 locally                          
Traceback (most recent call last):                                                                                                 
  File "cifar10.py", line 54, in <module>                                                                                          
    """Number of images to process in a batch.""")                                                                                 
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/platform/default/_flags.py", line 86, in DEFINE_integer           
    _define_helper(flag_name, default_value, docstring, int)                                                                       
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/platform/default/_flags.py", line 60, in _define_helper           
    type=flagtype)                                                                                                                 
  File "/usr/lib/python2.7/argparse.py", line 1297, in add_argument                                                                
    return self._add_action(action)                                                                                                
  File "/usr/lib/python2.7/argparse.py", line 1671, in _add_action                                                                 
    self._optionals._add_action(action)                                                                                            
  File "/usr/lib/python2.7/argparse.py", line 1498, in _add_action                                                                 
    action = super(_ArgumentGroup, self)._add_action(action)                                                                       
  File "/usr/lib/python2.7/argparse.py", line 1311, in _add_action                                                                 
    self._check_conflict(action)                                                                                                   
  File "/usr/lib/python2.7/argparse.py", line 1449, in _check_conflict                                                             
    conflict_handler(action, confl_optionals)                                                                                      
  File "/usr/lib/python2.7/argparse.py", line 1456, in _handle_conflict_error                                                      
    raise ArgumentError(action, message % conflict_string)                                                                         
argparse.ArgumentError: argument --batch_size: conflicting option string(s): --batch_size 

此错误似乎来自 cifar10.py 中的以下行:tf.app.flags.DEFINE_integer('batch_size', 128, """Number of images to process in a batch.""")

似乎 argparse 库认为我已经定义了选项字符串 --batch_size,但我没有。

[堆栈:Amazon g2.2xlarge spot 实例,Python 2.7.6]

cifr10.py 文件中:

import tensorflow as tf

from tensorflow.models.image.cifar10 import cifar10_input

FLAGS = tf.app.flags.FLAGS

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

错误是由最后一条语句产生的,该语句在 _flags.py 文件中定义了一个具有该名称的 argparse 参数。显然此时 tf.app 已经有这样的参数定义。

所以我们需要进一步回顾 import tensorflow as tf 以了解 tf.app 是如何创建的?

Amazon g2.2xlarge 是什么?这也可以定义 batch_size 吗?

看起来 tf.app 来自

tensorflow/python/platform/app.py

它又从类似

的东西中得到它
from tensorflow.python.platform.google._app import *

因此,如果您在某些 googleamazon 本身接受 batch_size 参数的平台上 运行,则可能会产生此错误。


另一个关于 cifr10batch_size 参数的问题:

同样的错误:

答案是使用 cifar10_train.pycifar10_eval.py,而不是 cifar10.py.