gpt4 book ai didi

python - 使用 pypi 预训练模型与 PyTorch

转载 作者:行者123 更新时间:2023-12-01 07:36:19 24 4
gpt4 key购买 nike

我有两种设置 - 一种大约需要 1 分钟。跑了10分钟另一个一小时后还在走:

10 米:

import pretrainedmodels 

def resnext50_32x4d(pretrained=False):
pretrained = 'imagenet' if pretrained else None
model = pretrainedmodels.se_resnext50_32x4d(pretrained=pretrained)
return nn.Sequential(*list(model.children()))

learn = cnn_learner(data, resnext50_32x4d, pretrained=True, cut=-2, split_on=lambda m: (m[0][3], m[1]),metrics=[accuracy, error_rate])

未完成:

import torchvision.models as models

def get_model(pretrained=True, model_name = 'resnext50_32x4d', **kwargs ):
arch = models.resnext50_32x4d(pretrained, **kwargs )
return arch

learn = Learner(data, get_model(), metrics=[accuracy, error_rate])

这都是从其他人的代码中复制和破解的,所以有些部分我不明白。但最令人困惑的是为什么其中一个会比另一个快得多。我想使用第二个选项,因为它对我来说更容易理解,而且我可以更换预训练的模型来测试不同的模型。

最佳答案

两种架构都不同。我假设您正在使用 pretrained-models.pytorch .

请注意,您在第一个示例中使用 SE-ResNeXt,在第二个示例中使用 ResNeXt(来自 torchvision 的标准示例)。

第一个版本使用更快的 block 架构(挤压和激励),研究论文描述它 here .

除了使用的不同构建 block 之外,我不确定架构和实现之间的确切差异,但是您可以打印两个模型并检查差异。

最后here是一篇很好的文章,总结了挤压和激励是什么。基本上,您在所有 channel 上执行 GlobalAveragePooling 操作(在 pytorch 中,它将是 torch.nn.AdaptiveAvgPoo2d(1) ,然后是扁平化),然后将其插入两个线性层(中间有 ReLU 激活)由 sigmoid 完成,以获得每个 channel 的权重。最后将 channel 乘以这些 channel 。

此外,您还对模块进行了一些奇怪的操作,将它们转换为torch.nn.Sequential。您通过复制模块删除的预训练网络的forward调用中可能存在一些逻辑,它也可能发挥作用。

关于python - 使用 pypi 预训练模型与 PyTorch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56976791/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com