MindSpore和Python中nn.Unfold的区别
创始人
2024-02-08 10:26:25
0

在往MindSpore迁移项目中遇到了这个转换,以至于不得不去仔细研究一下。

Unfold是卷积操作中的一部分,我们来看一下描述。

Unfold()函数是从一个batch图片中,提取出滑动的局部区域块,也就是卷积操作中的提取kernel filter对应的滑动窗口。Mindspore和pytorch的功能比较可以参考官网的链接。
比较与torch.nn.Unfold的功能差异 — MindSpore master documentation

首先强调一下几个我认为重点的东西

1、MindSpore的Unfold只能GPU使用无法在CPU上使用,测试也是不行的。

2、MindSpore这个方法输出的是四维的,Pytorch的输出是三维的。而只要把MindSpore 的最后两个维度合并就是Pytorch的结果了,这个后续讲详细介绍。

3、官网举的例子特别容易让人误解,Pytorch的例子直接用的Pytorch用的他们官方的,但是自己的例子是自己编的,并且和pytorch的例子还不是对应的关系。这让我们刚刚开始使用MindSpore的特别容易误解。

下面详细说一下这两个框架中Unfold的输入输出,以至于可以快速进行迁移。

在Pytorch中需要的参数是

  • kernel_size (int or tuple) – 滑动窗口的大小

  • stride (int or tupleoptional) – 滑动步长 Default: 1

  • padding (int or tupleoptional) – padding Default: 0

  • dilation (int or tupleoptional) – 空洞大小,这里默认1就是没有空洞,和conv中的有所区别. Default: 1 (这里就可以看出pytorch的文档写的确实好,他怕解释不清楚,给了可视化的链接conv_arithmetic/README.md at master · vdumoulin/conv_arithmetic · GitHub)

那么同理MindSpore这边的参数也是差不多的,但是格式真的是差距很大。也不知道为什么要求必须两边加个1,而padding的数量也是帮你定好了的。

  • ksizes (Union[tuple[int], list[int]]) - 滑窗大小,其格式为[1, ksize_row, ksize_col, 1]的int组成的tuple或list。

  • strides (Union[tuple[int], list[int]]) - 滑窗步长,其格式为[1, stride_row, stride_col, 1]的int组成的tuple或list。

  • rates (Union[tuple[int], list[int]]) - 滑窗元素之间的空洞个数,其格式为[1, rate_row, rate_col, 1] 的int组成的tuple或list。

  • padding (str) - 填充模式,可选值有:”same”或”valid”的字符串,不区分大小写。默认值:”valid”。

    • same - 指所提取的区域块的部分区域可以在原始图像之外,此部分填充为0。

    • valid - 表示所取的区域快必须被原始图像所覆盖。

好的,假如目前我们都设置了同样参数的Unfold,因为mindspore没有默认的参数,所以需要我们输入。那么同样参数的Unfold,得到的结果有什么差别呢?

py_unfold = torch.nn.Unfold(kernel_size=(2, 2)) # pytorch
ms_unfold = mindspore.nn.Unfold(ksizes=[1, 2, 2, 1], strides=[1, 1, 1, 1], rates=[1, 1, 1, 1])

假设input的维度为(N,C,W,H),kernel_size=(k1, k2)

那么Pytorch的输出维度为(N, C\times k1\times k2, L)

MindSpore的输出维度为(N, C\times k1\times k2, L_r\times L_w)

在这里L的求法都给了在数学上很复杂的公式,如果只是为了理解,那么完全没必要去看那个公式,在这里L = L_r\times L_w,这里第一个维度N就是batch_size,一直没有变,第二个维度是kernel乘以通道数C,最后一个维度是每一层会产生多少个小的窗口。用一张图就可以很容易解释了。加入input为(N,C,3,3),Unfold的核大小为(2,2),stride = 1 ,paddind = 0, dilation = 1。则最后的L = 4,如果使用MS,得到的为L_r\times L_w = 2\times 2

相关内容

热门资讯

卡莱尔的名言 卡莱尔的名言  1、天才就是无止境刻苦勤奋的能力。——卡莱尔  2、只有传记是真实的历史。——卡莱尔...
经典古文名言 经典古文名言大全  名言基本意思是很出名的说法,著名的话,一般指名人说的话。下面和小编一起来看经典古...
培根的至理名言佳句 培根的至理名言佳句  1、暂时解接的人,不能算是冤家。  2、读书使人成为完善的人。  3、天性好比...
教育家名言_教育名言名句   教师个人的范例,对于青年人的心灵,是任何东西都不能代替的最有用的阳光。如下是中国人才网给大家整理...
小学教育格言   小学教育格言  1、教学是发现,是分享,是成长,是兴奋和爱。——钱艳  2、礼貌是最容易做到的事...
小学生格言   小学生格言  1、不怕慢,就怕站。  2、树挪死,人挪活。  3、沉思的生活是美好的生活。  4...
刘基的名言 刘基的名言  1、邦无道,富加贵,耻也!  2、大其心,容天下之物;虚其心,受天下之善;平其心,论天...
蒋晓云的经典名言 蒋晓云的经典名言  我独自发着‘思古之幽情’,实际却好像在一个电影布景里。  虽然学历并没影响她一生...
菜根谭修身名言名句 菜根谭修身名言名句,以下是大学网小编精心整理的相关文章,希望对大家有所帮助!菜根谭修身名言名句欲做精...
读书的名人名言 读书的名人名言(通用190句)  读书之法无他,惟是笃志虚心,反复详玩,为有功耳。下面是小编为你整理...
经典的名人名言180条 经典的名人名言(精选180条)  在平平淡淡的学习、工作、生活中,大家都知道一些经典的名言吧。以下是...
科学家的名言 科学家的名言集锦  名言基本意思是很出名的说法,著名的话,一般指名人说的话。下面和小编一起来看科学家...
屈原名言名句 屈原名言名句  无论在学习、工作或是生活中,大家都接触过很多优秀的名言吧,名言是我国文化悠久,博大精...
德谟克利特名言名句阅读欣赏 德谟克利特名言名句大全阅读欣赏  德谟克利特名言名句大全  1、单单一个有智慧的人的友谊,要比所有愚...
人生哲理格言 人生哲理格言合集50句  人生需要积累,更需要沉淀,要常回头看看,用足够的时间去反思,在品味得失和甘...
热爱工作励志名言名句 热爱工作励志名言名句  在学习、工作或生活中,大家一定都接触过一些使用较为普遍的名言吧,巧用名言有助...
生命的格言 关于生命的格言(精选90句)  无论是在学校还是在社会中,大家都不可避免地会接触并使用名言吧,在议论...
反省的名人名言 关于反省的名人名言  在日常学习、工作和生活中,大家都知道一些经典的名言吧,名言具有概括自然有力,言...
人生格言座右铭短句 人生格言座右铭短句  用心工作,用心生活,用心感悟,人生格言座右铭短句。下面是由应届毕业生小编为大家...
踏实勤奋的名言警句 踏实勤奋的名言警句  不积跬步,无以至千里;不积小流,无以成江海。接下来小编搜集了踏实勤奋的名言警句...