В случае прямого прохода вы можете попытаться обезопасить выполнение модели примерно следующим образом:
import time
from functools import wraps
def check_time(link_name, func):
@wraps(func)
def wrapper(*args, **kwargs):
t = time.time()
res = func(*arsg, **kwargs)
t = time.time() - t
print("Execution of {0} of the link {1} took {2:.3f} sec".format(func.__name__, link_name, t)
return res
for name, link in model.namedlinks(skipself=True):
link.forward = check_time(name, link.forward)
Поскольку цепочник следует стратегии «определения при запуске», график вычисленийсоздается во время выполнения кода, поэтому метод backward()
определяется только для экземпляров chainer.Function
. Вам нужно будет обезьяны-исправлять соответствующие методы после каждого запуска, что, я думаю, сделает ваш код довольно медленным.
В любом случае, я надеюсь, мой код даст вам представление о том, как делать то, что вы хотите.