Anu*_*jan 140 python python-3.x tensorflow
如何tf.app.run()在Tensorflow中翻译演示?
在tensorflow/models/rnn/translate/translate.py,有一个电话tf.app.run().怎么处理?
if __name__ == "__main__":
tf.app.run()
Run Code Online (Sandbox Code Playgroud)
小智 122
if __name__ == "__main__":
Run Code Online (Sandbox Code Playgroud)
表示当前文件在shell下执行,而不是作为模块导入.
tf.app.run()
Run Code Online (Sandbox Code Playgroud)
正如你可以看到的文件 app.py
def run(main=None, argv=None):
"""Runs the program with an optional 'main' function and 'argv' list."""
f = flags.FLAGS
# Extract the args from the optional `argv` list.
args = argv[1:] if argv else None
# Parse the known flags from that list, or from the command
# line otherwise.
# pylint: disable=protected-access
flags_passthrough = f._parse_flags(args=args)
# pylint: enable=protected-access
main = main or sys.modules['__main__'].main
# Call the main function, passing through any arguments
# to the final program.
sys.exit(main(sys.argv[:1] + flags_passthrough))
Run Code Online (Sandbox Code Playgroud)
让我们一行一行:
flags_passthrough = f._parse_flags(args=args)
Run Code Online (Sandbox Code Playgroud)
这可以确保您通过命令行传递的参数有效,例如,
python my_model.py --data_dir='...' --max_iteration=10000实际上,此功能是基于python标准argparse模块实现的.
main = main or sys.modules['__main__'].main
Run Code Online (Sandbox Code Playgroud)
第一个main在右边=是当前函数的第一个参数run(main=None, argv=None)
.而sys.modules['__main__']意味着当前正在运行的文件(例如my_model.py).
所以有两种情况:
你没有main功能my_model.py然后你必须打电话tf.app.run(my_main_running_function)
你有一个main功能my_model.py.(大多数情况都是如此.)
最后一行:
sys.exit(main(sys.argv[:1] + flags_passthrough))
Run Code Online (Sandbox Code Playgroud)
确保使用已解析的参数正确调用您的函数main(argv)或my_main_running_function(argv)函数.
dga*_*dga 74
它只是一个非常快速的包装器,处理标志解析,然后调度到您自己的主.看代码.
简单来说,工作tf.app.run()是首先设置全局标志以供以后使用,例如:
from tensorflow.python.platform import flags
f = flags.FLAGS
Run Code Online (Sandbox Code Playgroud)
然后使用一组参数运行您的自定义 main函数。
例如,在TensorFlow NMT代码库中,用于训练/推理的程序执行的第一个入口点从此时开始(见下面的代码)
if __name__ == "__main__":
nmt_parser = argparse.ArgumentParser()
add_arguments(nmt_parser)
FLAGS, unparsed = nmt_parser.parse_known_args()
tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)
Run Code Online (Sandbox Code Playgroud)
使用解析参数后argparse,tf.app.run()运行函数“main”,其定义如下:
def main(unused_argv):
default_hparams = create_hparams(FLAGS)
train_fn = train.train
inference_fn = inference.inference
run_main(FLAGS, default_hparams, train_fn, inference_fn)
Run Code Online (Sandbox Code Playgroud)
因此,在设置全局使用的标志后,tf.app.run()只需运行main您argv作为参数传递给它的函数。
PS:正如萨尔瓦多·达利 (Salvador Dali) 的回答所说,我猜这只是一种很好的软件工程实践,尽管我不确定 TensorFlow 是否会执行任何优化的main函数运行,而不是使用普通 CPython 运行的运行。
| 归档时间: |
|
| 查看次数: |
50034 次 |
| 最近记录: |