Machine learning 如何在保存为.pth文件的AI模型上获取层执行时间?

Machine learning 如何在保存为.pth文件的AI模型上获取层执行时间?,machine-learning,pytorch,torch,resnet,checkpointing,Machine Learning,Pytorch,Torch,Resnet,Checkpointing,我试图在CPU上运行一个类似Resnet的图像分类模型,并想知道运行模型的每一层所需的时间 我面临的问题是github链接将模型保存为.pth文件。它非常大(100MB),我不知道它和pytorch有什么区别,只是它是二进制的。 我使用以下脚本从该文件加载模型。但是我看不到一种方法来修改模型或在模型层之间插入t=time.time()变量/语句来分解每个层中的时间 问题: 在下面的脚本中运行模型会正确估计在CPU上运行模型所需的端到端时间(t2-t1),还是还会包括pytorch编译时间 如何

我试图在CPU上运行一个类似Resnet的图像分类模型,并想知道运行模型的每一层所需的时间

我面临的问题是github链接将模型保存为
.pth
文件。它非常大(100MB),我不知道它和pytorch有什么区别,只是它是二进制的。 我使用以下脚本从该文件加载模型。但是我看不到一种方法来修改模型或在模型层之间插入
t=time.time()
变量/语句来分解每个层中的时间

问题:

  • 在下面的脚本中运行模型会正确估计在CPU上运行模型所需的端到端时间(t2-t1),还是还会包括pytorch编译时间

  • 如何在连续层之间插入时间语句以获得细分

  • github链接上没有推理/训练脚本,只有.pth文件。那么,一个人到底应该如何进行推理或训练呢?如何在.pth模型的连续层之间插入附加层并保存它们


  • 实现这种需求的一种简单方法是在模型的每个模块上注册前向钩子,该模块更新用于存储时间的全局变量,并计算上一次计算和当前计算之间的时间差

    例如:

    导入火炬
    进口火炬视觉
    导入时间
    全局时间=无
    执行次数=[]
    def存储时间(自身、输入、输出):
    全球时间,执行时间
    exec_times.append(time.time()-全局_time)
    全局时间=time.time()
    model=torch.hub.load('facebookresearch/semi-Supervisive-ImageNet1K-models','resnext50_32x4d_swsl',force_reload=False)
    x=火炬。随机数(1,3,224,224)
    #为每个模块注册一个钩子以计算时间差
    对于model.modules()中的模块:
    模块.寄存器前向挂钩(存储时间)
    全局时间=time.time()
    out=型号(x)
    t2=时间。时间()
    对于zip中的模块t(model.modules(),执行次数):
    打印(f“{module.{class}:{t}”)
    
    我得到的结果是:

    <class 'torchvision.models.resnet.ResNet'>: 0.004999876022338867
    <class 'torch.nn.modules.conv.Conv2d'>: 0.002006053924560547
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0009946823120117188
    <class 'torch.nn.modules.activation.ReLU'>: 0.007998466491699219
    <class 'torch.nn.modules.pooling.MaxPool2d'>: 0.0010004043579101562
    <class 'torch.nn.modules.container.Sequential'>: 0.0020003318786621094
    <class 'torchvision.models.resnet.Bottleneck'>: 0.0010023117065429688
    <class 'torch.nn.modules.conv.Conv2d'>: 0.017997026443481445
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0010018348693847656
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0009999275207519531
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.003000497817993164
    <class 'torch.nn.modules.conv.Conv2d'>: 0.003999948501586914
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.001997232437133789
    <class 'torch.nn.modules.activation.ReLU'>: 0.004001140594482422
    <class 'torch.nn.modules.container.Sequential'>: 0.0
    <class 'torch.nn.modules.conv.Conv2d'>: 0.001999378204345703
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0
    <class 'torchvision.models.resnet.Bottleneck'>: 0.003001689910888672
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0020008087158203125
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0009992122650146484
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0019991397857666016
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0010001659393310547
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0009999275207519531
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.002998828887939453
    <class 'torch.nn.modules.activation.ReLU'>: 0.0010013580322265625
    <class 'torchvision.models.resnet.Bottleneck'>: 0.0029997825622558594
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.002999544143676758
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0010006427764892578
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.001001119613647461
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0019979476928710938
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0010018348693847656
    <class 'torch.nn.modules.activation.ReLU'>: 0.0010001659393310547
    <class 'torch.nn.modules.container.Sequential'>: 0.00299835205078125
    <class 'torchvision.models.resnet.Bottleneck'>: 0.002004384994506836
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0009975433349609375
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.005999088287353516
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0020003318786621094
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0010001659393310547
    <class 'torch.nn.modules.activation.ReLU'>: 0.0020017623901367188
    <class 'torch.nn.modules.container.Sequential'>: 0.0009970664978027344
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0029997825622558594
    <class 'torchvision.models.resnet.Bottleneck'>: 0.0010008811950683594
    <class 'torch.nn.modules.conv.Conv2d'>: 0.00500035285949707
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0009984970092773438
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0020020008087158203
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0019979476928710938
    <class 'torch.nn.modules.activation.ReLU'>: 0.0010018348693847656
    <class 'torchvision.models.resnet.Bottleneck'>: 0.0
    <class 'torch.nn.modules.conv.Conv2d'>: 0.00099945068359375
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.001001119613647461
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.002997875213623047
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0010013580322265625
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.002000570297241211
    <class 'torch.nn.modules.activation.ReLU'>: 0.0
    <class 'torchvision.models.resnet.Bottleneck'>: 0.001997232437133789
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0010008811950683594
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0
    <class 'torch.nn.modules.conv.Conv2d'>: 0.001001596450805664
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.00099945068359375
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.002998828887939453
    <class 'torch.nn.modules.activation.ReLU'>: 0.0010020732879638672
    <class 'torch.nn.modules.container.Sequential'>: 0.0010020732879638672
    <class 'torchvision.models.resnet.Bottleneck'>: 0.0
    <class 'torch.nn.modules.conv.Conv2d'>: 0.001995563507080078
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.002001523971557617
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0010001659393310547
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0010008811950683594
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0
    <class 'torch.nn.modules.activation.ReLU'>: 0.0029985904693603516
    <class 'torch.nn.modules.container.Sequential'>: 0.0009989738464355469
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0010068416595458984
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0
    <class 'torchvision.models.resnet.Bottleneck'>: 0.0
    <class 'torch.nn.modules.conv.Conv2d'>: 0.004993438720703125
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0010013580322265625
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0010001659393310547
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0010018348693847656
    <class 'torch.nn.modules.conv.Conv2d'>: 0.001997709274291992
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0
    <class 'torch.nn.modules.activation.ReLU'>: 0.0019991397857666016
    <class 'torchvision.models.resnet.Bottleneck'>: 0.0029990673065185547
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0030128955841064453
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0019872188568115234
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0029993057250976562
    <class 'torch.nn.modules.activation.ReLU'>: 0.0010008811950683594
    <class 'torchvision.models.resnet.Bottleneck'>: 0.0
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0010006427764892578
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0009992122650146484
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.003001689910888672
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0019986629486083984
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0010008811950683594
    <class 'torch.nn.modules.activation.ReLU'>: 0.0
    <class 'torchvision.models.resnet.Bottleneck'>: 0.002000093460083008
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0019986629486083984
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0020012855529785156
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0019981861114501953
    <class 'torch.nn.modules.activation.ReLU'>: 0.0030014514923095703
    <class 'torchvision.models.resnet.Bottleneck'>: 0.0
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0029985904693603516
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0010008811950683594
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0010013580322265625
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0009989738464355469
    <class 'torch.nn.modules.activation.ReLU'>: 0.0
    <class 'torch.nn.modules.container.Sequential'>: 0.002998828887939453
    <class 'torchvision.models.resnet.Bottleneck'>: 0.002000570297241211
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0
    <class 'torch.nn.modules.conv.Conv2d'>: 0.003000497817993164
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0020020008087158203
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0009982585906982422
    <class 'torch.nn.modules.activation.ReLU'>: 0.0009996891021728516
    <class 'torch.nn.modules.container.Sequential'>: 0.0
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0029990673065185547
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0020003318786621094
    <class 'torchvision.models.resnet.Bottleneck'>: 0.0010025501251220703
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0019981861114501953
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0019996166229248047
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0019996166229248047
    <class 'torch.nn.modules.activation.ReLU'>: 0.0
    <class 'torchvision.models.resnet.Bottleneck'>: 0.0030002593994140625
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0020012855529785156
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0
    <class 'torch.nn.modules.conv.Conv2d'>: 0.006000518798828125
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0019979476928710938
    <class 'torch.nn.modules.activation.ReLU'>: 0.0
    <class 'torch.nn.modules.pooling.AdaptiveAvgPool2d'>: 0.002003192901611328
    <class 'torch.nn.modules.linear.Linear'>: 0.0019965171813964844
    
    Process finished with exit code 0
    
    
    
    :0.004999876022338867
    : 0.002006053924560547
    : 0.0009946823120117188
    : 0.007998466491699219
    : 0.0010004043579101562
    : 0.0020003318786621094
    : 0.0010023117065429688
    : 0.017997026443481445
    : 0.0010018348693847656
    : 0.0009999275207519531
    : 0.003000497817993164
    : 0.003999948501586914
    : 0.001997232437133789
    : 0.004001140594482422
    : 0.0
    : 0.001999378204345703
    : 0.0
    : 0.003001689910888672
    : 0.0020008087158203125
    : 0.0009992122650146484
    : 0.0019991397857666016
    : 0.0010001659393310547
    : 0.0009999275207519531
    : 0.002998828887939453
    : 0.0010013580322265625
    : 0.0029997825622558594
    : 0.0
    : 0.002999544143676758
    : 0.0010006427764892578
    : 0.001001119613647461
    : 0.0019979476928710938
    : 0.0010018348693847656
    : 0.0010001659393310547
    : 0.00299835205078125
    : 0.002004384994506836
    : 0.0009975433349609375
    : 0.0
    : 0.0
    : 0.005999088287353516
    : 0.0020003318786621094
    : 0.0010001659393310547
    : 0.0020017623901367188
    : 0.0009970664978027344
    : 0.0
    : 0.0029997825622558594
    : 0.0010008811950683594
    : 0.00500035285949707
    : 0.0009984970092773438
    : 0.0
    : 0.0020020008087158203
    : 0.0
    : 0.0019979476928710938
    : 0.0010018348693847656
    : 0.0
    : 0.00099945068359375
    : 0.001001119613647461
    : 0.0
    : 0.002997875213623047
    : 0.0010013580322265625
    : 0.002000570297241211
    : 0.0
    : 0.001997232437133789
    : 0.0010008811950683594
    : 0.0
    : 0.001001596450805664
    : 0.00099945068359375
    : 0.0
    : 0.002998828887939453
    : 0.0010020732879638672
    : 0.0010020732879638672
    : 0.0
    : 0.001995563507080078
    : 0.002001523971557617
    : 0.0
    : 0.0010001659393310547
    : 0.0010008811950683594
    : 0.0
    : 0.0029985904693603516
    : 0.0009989738464355469
    : 0.0010068416595458984
    : 0.0
    : 0.0
    : 0.004993438720703125
    : 0.0010013580322265625
    : 0.0010001659393310547
    : 0.0010018348693847656
    : 0.001997709274291992
    : 0.0
    : 0.0019991397857666016
    : 0.0029990673065185547
    : 0.0030128955841064453
    : 0.0019872188568115234
    : 0.0
    : 0.0
    : 0.0
    : 0.0029993057250976562
    : 0.0010008811950683594
    : 0.0
    : 0.0010006427764892578
    : 0.0009992122650146484
    : 0.0
    : 0.003001689910888672
    : 0.0019986629486083984
    : 0.0010008811950683594
    : 0.0
    : 0.002000093460083008
    : 0.0019986629486083984
    : 0.0
    : 0.0
    : 0.0020012855529785156
    : 0.0
    : 0.0019981861114501953
    : 0.0030014514923095703
    : 0.0
    : 0.0
    : 0.0029985904693603516
    : 0.0010008811950683594
    : 0.0
    : 0.0010013580322265625
    : 0.0009989738464355469
    : 0.0
    : 0.002998828887939453
    : 0.002000570297241211
    : 0.0
    : 0.0
    : 0.003000497817993164
    : 0.0020020008087158203
    : 0.0
    : 0.0009982585906982422
    : 0.0009996891021728516
    : 0.0
    : 0.0029990673065185547
    : 0.0020003318786621094
    : 0.0010025501251220703
    : 0.0
    : 0.0019981861114501953
    : 0.0019996166229248047
    : 0.0
    : 0.0
    : 0.0019996166229248047
    : 0.0
    : 0.0030002593994140625
    : 0.0020012855529785156
    : 0.0
    : 0.0
    : 0.0
    : 0.006000518798828125
    : 0.0019979476928710938
    : 0.0
    : 0.002003192901611328
    : 0.0019965171813964844
    进程已完成,退出代码为0
    
    实现此要求的一种简单方法是在模型的每个模块上注册前向钩子,该模块更新用于存储时间的全局变量,并计算上一次和当前计算之间的时间差

    例如:

    导入火炬
    进口火炬视觉
    导入时间
    全局时间=无
    执行次数=[]
    def存储时间(自身、输入、输出):
    全球时间,执行时间
    exec_times.append(time.time()-全局_time)
    全局时间=time.time()
    model=torch.hub.load('facebookresearch/semi-Supervisive-ImageNet1K-models','resnext50_32x4d_swsl',force_reload=False)
    x=火炬。随机数(1,3,224,224)
    #为每个模块注册一个钩子以计算时间差
    对于model.modules()中的模块:
    模块.寄存器前向挂钩(存储时间)
    全局时间=time.time()
    out=型号(x)
    t2=时间。时间()
    对于zip中的模块t(model.modules(),执行次数):
    打印(f“{module.{class}:{t}”)
    <class 'torchvision.models.resnet.ResNet'>: 0.004999876022338867
    <class 'torch.nn.modules.conv.Conv2d'>: 0.002006053924560547
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0009946823120117188
    <class 'torch.nn.modules.activation.ReLU'>: 0.007998466491699219
    <class 'torch.nn.modules.pooling.MaxPool2d'>: 0.0010004043579101562
    <class 'torch.nn.modules.container.Sequential'>: 0.0020003318786621094
    <class 'torchvision.models.resnet.Bottleneck'>: 0.0010023117065429688
    <class 'torch.nn.modules.conv.Conv2d'>: 0.017997026443481445
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0010018348693847656
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0009999275207519531
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.003000497817993164
    <class 'torch.nn.modules.conv.Conv2d'>: 0.003999948501586914
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.001997232437133789
    <class 'torch.nn.modules.activation.ReLU'>: 0.004001140594482422
    <class 'torch.nn.modules.container.Sequential'>: 0.0
    <class 'torch.nn.modules.conv.Conv2d'>: 0.001999378204345703
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0
    <class 'torchvision.models.resnet.Bottleneck'>: 0.003001689910888672
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0020008087158203125
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0009992122650146484
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0019991397857666016
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0010001659393310547
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0009999275207519531
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.002998828887939453
    <class 'torch.nn.modules.activation.ReLU'>: 0.0010013580322265625
    <class 'torchvision.models.resnet.Bottleneck'>: 0.0029997825622558594
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.002999544143676758
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0010006427764892578
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.001001119613647461
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0019979476928710938
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0010018348693847656
    <class 'torch.nn.modules.activation.ReLU'>: 0.0010001659393310547
    <class 'torch.nn.modules.container.Sequential'>: 0.00299835205078125
    <class 'torchvision.models.resnet.Bottleneck'>: 0.002004384994506836
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0009975433349609375
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.005999088287353516
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0020003318786621094
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0010001659393310547
    <class 'torch.nn.modules.activation.ReLU'>: 0.0020017623901367188
    <class 'torch.nn.modules.container.Sequential'>: 0.0009970664978027344
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0029997825622558594
    <class 'torchvision.models.resnet.Bottleneck'>: 0.0010008811950683594
    <class 'torch.nn.modules.conv.Conv2d'>: 0.00500035285949707
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0009984970092773438
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0020020008087158203
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0019979476928710938
    <class 'torch.nn.modules.activation.ReLU'>: 0.0010018348693847656
    <class 'torchvision.models.resnet.Bottleneck'>: 0.0
    <class 'torch.nn.modules.conv.Conv2d'>: 0.00099945068359375
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.001001119613647461
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.002997875213623047
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0010013580322265625
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.002000570297241211
    <class 'torch.nn.modules.activation.ReLU'>: 0.0
    <class 'torchvision.models.resnet.Bottleneck'>: 0.001997232437133789
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0010008811950683594
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0
    <class 'torch.nn.modules.conv.Conv2d'>: 0.001001596450805664
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.00099945068359375
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.002998828887939453
    <class 'torch.nn.modules.activation.ReLU'>: 0.0010020732879638672
    <class 'torch.nn.modules.container.Sequential'>: 0.0010020732879638672
    <class 'torchvision.models.resnet.Bottleneck'>: 0.0
    <class 'torch.nn.modules.conv.Conv2d'>: 0.001995563507080078
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.002001523971557617
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0010001659393310547
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0010008811950683594
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0
    <class 'torch.nn.modules.activation.ReLU'>: 0.0029985904693603516
    <class 'torch.nn.modules.container.Sequential'>: 0.0009989738464355469
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0010068416595458984
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0
    <class 'torchvision.models.resnet.Bottleneck'>: 0.0
    <class 'torch.nn.modules.conv.Conv2d'>: 0.004993438720703125
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0010013580322265625
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0010001659393310547
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0010018348693847656
    <class 'torch.nn.modules.conv.Conv2d'>: 0.001997709274291992
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0
    <class 'torch.nn.modules.activation.ReLU'>: 0.0019991397857666016
    <class 'torchvision.models.resnet.Bottleneck'>: 0.0029990673065185547
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0030128955841064453
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0019872188568115234
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0029993057250976562
    <class 'torch.nn.modules.activation.ReLU'>: 0.0010008811950683594
    <class 'torchvision.models.resnet.Bottleneck'>: 0.0
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0010006427764892578
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0009992122650146484
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.003001689910888672
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0019986629486083984
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0010008811950683594
    <class 'torch.nn.modules.activation.ReLU'>: 0.0
    <class 'torchvision.models.resnet.Bottleneck'>: 0.002000093460083008
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0019986629486083984
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0020012855529785156
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0019981861114501953
    <class 'torch.nn.modules.activation.ReLU'>: 0.0030014514923095703
    <class 'torchvision.models.resnet.Bottleneck'>: 0.0
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0029985904693603516
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0010008811950683594
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0010013580322265625
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0009989738464355469
    <class 'torch.nn.modules.activation.ReLU'>: 0.0
    <class 'torch.nn.modules.container.Sequential'>: 0.002998828887939453
    <class 'torchvision.models.resnet.Bottleneck'>: 0.002000570297241211
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0
    <class 'torch.nn.modules.conv.Conv2d'>: 0.003000497817993164
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0020020008087158203
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0009982585906982422
    <class 'torch.nn.modules.activation.ReLU'>: 0.0009996891021728516
    <class 'torch.nn.modules.container.Sequential'>: 0.0
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0029990673065185547
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0020003318786621094
    <class 'torchvision.models.resnet.Bottleneck'>: 0.0010025501251220703
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0019981861114501953
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0019996166229248047
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0019996166229248047
    <class 'torch.nn.modules.activation.ReLU'>: 0.0
    <class 'torchvision.models.resnet.Bottleneck'>: 0.0030002593994140625
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0020012855529785156
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0
    <class 'torch.nn.modules.conv.Conv2d'>: 0.0
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0
    <class 'torch.nn.modules.conv.Conv2d'>: 0.006000518798828125
    <class 'torch.nn.modules.batchnorm.BatchNorm2d'>: 0.0019979476928710938
    <class 'torch.nn.modules.activation.ReLU'>: 0.0
    <class 'torch.nn.modules.pooling.AdaptiveAvgPool2d'>: 0.002003192901611328
    <class 'torch.nn.modules.linear.Linear'>: 0.0019965171813964844
    
    Process finished with exit code 0