tensorflow中程序执行入口tf.app.run()的应用

tensorflow的代码中,常常会有tf.app.run()作为入口的写法,如下:

...
# 此处省略n行代码
...

def main(_):
    ...


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

好的,那我们就进入tf.app.run()这个函数里康康到底是什么样子的。

@tf_export(v1=[‘app.run‘])
def run(main=None, argv=None):
  """Runs the program with an optional ‘main‘ function and ‘argv‘ list."""

  main = main or _sys.modules[‘__main__‘].main

  _run(main=main, argv=argv, flags_parser=_parse_flags_tolerate_undef)

从这里看,应该是输入一个函数对象作为参数,用于程序的运行,如果没输入函数就使用默认的_sys.modules[‘main‘].main,再回到执行该函数的模块,该模块从其它模块导入的run函数中,_sys.modules[‘main‘]的结果是什么

# file1
import sys as _sys

def run():
    print(_sys.modules[‘__main__‘])
    print(_sys.modules[‘__main__‘].main)
# file2
from file1 import run


def main(_):
    pass


if __name__ == ‘__main__‘:
    run()

run函数中pirnt的结果为:
<module ‘main‘ from ‘D:/data/Projects/demo/file2.py‘>
<function main at 0x00000142C79B2F28>

可见,tf.app.run函数中的默认函数即为file2中main函数对象,当主函数不为main时为test时,需将test函数作为参数传入tf.app.run()中,如下

...
# 此处省略n行代码
...

def test(_):
    # 主函数
    ...


if __name__ == "__main__":
    tf.app.run(test)

tensorflow中程序执行入口tf.app.run()的应用

上一篇:MyEclipse中使用CVS管理


下一篇:软件工程复习(一)