1

如何测量每一层所花费的时间?这应该包括向前和向后传球。

例如,在 VGG 的情况下,我想知道每一层所花费的时间。部分代码如下所示。

   h = F.relu(self.conv1_2(h))
   h = F.max_pooling_2d(h, 2, 2)

   h = F.relu(self.conv2_1(h))
   h = F.relu(self.conv2_2(h))
   h = F.max_pooling_2d(h, 2, 2)


4

1 回答 1

0

在前向传递的情况下,您可以尝试对模型的执行进行猴子修补,如下所示:

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)

由于chainer遵循“define-by-run”策略,计算图是在你运行代码时构建的,所以backward()方法只在chainer.Function实例上定义。你需要在每次运行后对相应的方法进行猴子补丁,我猜这会让你的代码变得很慢。

无论如何,我希望我的代码能让你知道如何做你想做的事。

于 2019-10-12T16:29:24.447 回答