Очевидно, TF2.0 Autograph работает с Numpy операциями
Я написал простой пример ниже, и я использую autograph.to_code
, чтобы увидеть, что Autograph делает с операцией Numpy. ag__.converted_call
, кажется, выполняет работу функций Numpy. Но я не знаю, что происходит при этом преобразованном вызове.
Мне любопытно, как TF сгенерировал граф с Numpy операциями. Преобразует ли TF2.0 все операции Numpy в операции TF? Нужно ли нам беспокоиться о проблемах производительности из-за чрезмерного использования операции Numpy в нашем коде TF2.0?
@tf.function
def run():
a = np.array([1, 2])
if a[0] > 1:
a[0] = 10
a = a.reshape(-1)
return tf.convert_to_tensor(a)
print(tf.autograph.to_code(run.python_function))
Это дает вывод:
def tf__run():
do_return = False
retval_ = ag__.UndefinedReturnValue()
with ag__.FunctionScope('run', 'run_scope', ag__.ConversionOptions(recursive=True, user_requested=True, optional_features=(), internal_convert_user_code=True)) as run_scope:
a = ag__.converted_call(np.array, run_scope.callopts, ([1, 2],), None, run_scope)
def get_state():
return a[0],
def set_state(vals):
a[0], = vals
def if_true():
a_1, = a,
a_1[0] = 10
a_1 = ag__.converted_call(a_1.reshape, run_scope.callopts, (-1,), None, run_scope)
return a_1
def if_false():
return a
cond = a[0] > 1
a = ag__.if_stmt(cond, if_true, if_false, get_state, set_state, ('a',), ('a[0]',))
do_return = True
retval_ = run_scope.mark_return_value(ag__.converted_call(tf.convert_to_tensor, run_scope.callopts, (a,), None, run_scope))
do_return,
return ag__.retval(retval_)