Python 如何在Chainer中测量每层的时间

Python 如何在Chainer中测量每层的时间,python,chainer,chainercv,Python,Chainer,Chainercv,如何测量每层所用的时间?这应该包括向前和向后传球 例如,在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) 在向前传球的情况下,您可以尝试对模型的执行进行如下操作

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

例如,在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)



在向前传球的情况下,您可以尝试对模型的执行进行如下操作:

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遵循“按运行定义”策略,因此计算图是在运行代码时构建的,因此
backward()
方法仅在
chainer.Function
实例上定义。每次运行之后,您都需要对相应的方法进行修补,我想这会使您的代码编写速度非常慢


无论如何,我希望,我的代码能让您了解如何做您想要的事情。

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

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遵循“按运行定义”策略,因此计算图是在运行代码时构建的,因此
backward()
方法仅在
chainer.Function
实例上定义。每次运行之后,您都需要对相应的方法进行修补,我想这会使您的代码编写速度非常慢


无论如何,我希望,我的代码能让您了解如何做您想做的事情。

是的,这确实有帮助。谢谢,这真的很有帮助。谢谢