@tf_export为函数取了个名字
tensorflow经常看到定义的函数前面加了@tf_export,比如nms的实现
@tf_export('image.non_max_suppression')
def non_max_suppression(boxes,
scores,
max_output_size,
iou_threshold=0.5,
score_threshold=float('-inf'),
name=None):
首先:@tf_export是一个修饰符,修饰符的本质是一个函数,tf_export的实现在tensorflow/python/util/tf_export.py中:
tf_export = functools.partial(api_export, api_name=TENSORFLOW_API_NAME)
等号右边的理解可以分为两步:
1.functools.partial
2. api_export
functools.partial是偏函数,它的本质简而言是为函数固定某些参数,如:functools.partial(FuncA, p1)的作用是把函数FuncA的第一个参数固定为p1;又如functools.partial(FuncB, key1="Hello")的作用是把FuncB中的参数key1固定为“Hello"。
functools.partial(api_export, api_name=TENSORFLOW_API_NAME)的意思是把api_export的api_name这个参数固定为TENSORFLOW_API。其中TENSORFLOW_API_NAME = 'tensorflow'。