tensorflow函数tf.app.run()参数

本文围绕Python和TensorFlow展开,介绍了`if __name__ == '__main__'`语句用于自测试的原理,详细解析了`tf.app.run()`的源码、使用情况,包括入口函数不同命名时的写法,还提及了命令行参数`tf.app.flags.DEFINE_xxx`,并给出相关示例和参考链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

致谢:

https://stackoverflow.com/questions/33703624/how-does-tf-app-run-work

https://blog.youkuaiyun.com/Suan2014/article/details/76269241

https://blog.youkuaiyun.com/fxjzzyo/article/details/80466321

 

1 形式

if __name__ == '__main__':

    tf.app.run()

2关于if __name__ == '__main__':

该语句经常用于自测试。

__name__有两种情况:

为了方便描述将所在文件名定为my_model.py。

1)当该文件直接运行时,例如执行

python my_model.py

__name__数值是__main__,因此会执行if内的语句

2)当该文件以模块形式导入时,例如执行:

import my_model

__name__数值是my_model,因此不会执行if内的语句

 

3关于 tf.app.run()

run源码:

def run(main=None, argv=None):
  """Runs the program with an optional 'main' function and 'argv' list."""

  # Define help flags.
  _define_help_flags()

  # Parse known flags.
  argv = flags.FLAGS(_sys.argv if argv is None else argv, known_only=True)

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

  # Call the main function, passing through any arguments
  # to the final program.
  _sys.exit(main(argv))

其中语句:

main = main or sys.modules['__main__'].main

The first main in right side of = is the first argument of current function run(main=None, argv=None) . While sys.modules['__main__'] means current running file(e.g. my_model.py).

即run的main如果有参数传入则执行传入参数,如果没有传入则默认在my_model.py中找main执行。

如果my_model.py中即没有main,有不传入参数,则run会报错。

 

使用

有两种情况:

  • 如果代码中的入口函数叫main(),则你就可以把入口写成tf.app.run(),相当于将tf.app.run(main)中的main参数不传入,缺省情况下run函数找文件中的main执行;
  • 如果代码中的入口函数不叫main(),而是一个其他名字的函数,如test(),则你应该这样写入口tf.app.run(test)

也可以参数显式赋值使用:

import tensorflow as tf
#导入命令行解析模块
import argparse
import sys
 
FLAGS=None
def main(_):
    print(sys.argv[0])
 
if __name__=="__main__":
    #创建对象
    parse=argparse.ArgumentParser()
    #增加命令行
    parse.add_argument('--dataDir',type=str,default='\\tmp\\tensorflow\\mnist\\inputData',
                    help='Directory for string input data')
    FLAGS, unparsed=parse.parse_known_args()
    tf.app.run(main=main, argv=[sys.argv[0]] + unparsed) #解析命令行参数,调用main函数 main(sys.argv)
 

 

4命令行参数:tf.app.flags.DEFINE_xxx

简单易懂有示例:

https://blog.youkuaiyun.com/dcrmg/article/details/79658725

tf 中定义了 tf.app.flags.FLAGS ,用于接受从终端传入的命令行参数。例如:

单步执行,可以观察到文件执行的顺序:

1)单行变量操作:flag创建等;

2)函数只执行def声明行,不执行函数内容;

3)如果有if __name__ == '__main__',根据条件执行。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值