gpt4 book ai didi

python - 使用 $\pm 1$ 值的内核进行卷积是否应该比使用常规类型更快?

转载 作者:行者123 更新时间:2023-11-30 09:15:26 25 4
gpt4 key购买 nike

我很抱歉问了一个很长的问题,如果问这个问题看起来真的很奇怪。

如果我有一个 N × N 输入图像,并且我将其与由 (+1,-1) 值组成的内核进行卷积,那么此操作是否应该比内核具有随机数(例如,来自标准正态分布)更快)?对我来说,似乎在卷积运算期间,图像和内核值的乘法会导致简单的符号变化,但它仍然算作常规乘法,因此不会真正影响运算计数和整体复杂性。然而,我的同事告诉我,我错了,我们应该看到速度的提高,这让我有点怀疑我是否正确实现了一切。

到目前为止,我已经尝试在 Jupyter 笔记本中使用计时魔法来测量 (+1,-1) 内核和常规类型的每个卷积的时间。我没看出什么区别。我的主要疑问是:到底应该有什么吗?对于这样一个特定的内核,有没有办法加快速度?

from torch.nn import functional as f
import torch

kernel = torch.randn((255,3,3,3)).sign_().float()
image = torch.randn((1,3,224,224)).float()
<小时/>
%%timeit
f.conv2d(image, kernel, stride=1, padding=1,)
<小时/>

这给了我:10 个循环,最好的 3 个:每个循环 78.3 毫秒在没有 sign_() 操作的情况下运行时,每个循环产生 78.9。

应该有什么显着差异吗?

最佳答案

您当前的实现将 +/-1 内核视为常规 .float() 类型内核,pytorch 无法知道该内核是“特殊”的并且容易进行高效计算。
为了提高效率,有一些关于离散化网络权重的工作,但这些离散化必须辅以利用权重的结构/数据类型的内核的定制实现。
如果没有专门定制的实现,pytorch 就无法利用 +/-1 权重来加速计算。

关于python - 使用 $\pm 1$ 值的内核进行卷积是否应该比使用常规类型更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57281765/

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