首页IT科技反射添加属性(反射填充详解ReflectionPad2d(padding))

反射添加属性(反射填充详解ReflectionPad2d(padding))

时间2025-09-17 10:40:55分类IT科技浏览7222
导读:一、反射填充 这种填充方式是以输入向量的边界为对称轴,以设定的padding大小为步长,将输入向量的边界内padding大小的元素,对称填充。设定padding时主要注意,padding必须小于向量所在维度的大小。...

一                    、反射填充

这种填充方式是以输入向量的边界为对称轴                 ,以设定的padding大小为步长                              ,将输入向量的边界内padding大小的元素         ,对称填充                    。设定padding时主要注意            ,padding必须小于向量所在维度的大小                          。

1                          、一维反射填充

1)调用方式

输入形状为(N,C,W_IN)或(C,W_IN); 输出形状为(N,C,W_out)或(C,W_out); padding表示填充尺寸                             ,可为整数或者2元组;padding为整数时              ,输入向量左右填充相同的大小;而padding为元组时可自定义向量左右分别填充多少; torch.nn.ReflectionPad1d(padding)

2)实例

对于一维填充来说        ,其输入为N个宽度为W的向量                            ,而每个元素对应有C个通道          。此方式填充只针对他的宽度进行                   ,填充点分别为向量左边和右边两个边界               。不同的padding类型(整数或元组)    ,决定了左右两边如何填充的方式                          。

(1)padding为整数 inp=torch.tensor([[[2., 3., 9., 1., 5.], [6., 4., 0., 5., 0.]]]) print(inp.shape) print("inp:",inp) pad=1 out=nn.ReflectionPad1d(padding=pad)(inp) print("padding={},out:".format(pad),out) print(out.shape)

结果分析(绿线代表以此为轴                           ,红色代表填充的元素):

1)当padding=1时                        ,表示向量左右两边均以边界为对称轴,填充宽度为1的元素              。 torch.Size([1, 2, 5]) inp: tensor([[[2., 3., 9., 1., 5.], [6., 4., 0., 5., 0.]]]) padding=1,out: tensor([[[3., 2., 3., 9., 1., 5., 1.], [4., 6., 4., 0., 5., 0., 5.]]]) torch.Size([1, 2, 7])

2)当padding=2时                      ,表示向量左右两边均以边界为对称轴                             ,填充宽度为2的元素          。

torch.Size([1, 2, 5]) inp: tensor([[[2., 3., 9., 1., 5.], [6., 4., 0., 5., 0.]]]) padding=2,out: tensor([[[9., 3., 2., 3., 9., 1., 5., 1., 9.], [0., 4., 6., 4., 0., 5., 0., 5., 0.]]]) torch.Size([1, 2, 9]) (2)padding为2元组 inp=torch.tensor([[[2., 3., 9., 1., 5.], [6., 4., 0., 5., 0.]]]) print(inp.shape) print("inp:",inp) pad=(1,2) out=nn.ReflectionPad1d(padding=pad)(inp) print("padding={},out:".format(pad),out) print(out.shape)

结果分析:

1)当padding=(1,2)时    ,表示向量以边界为对称轴                 ,左右两边分别填充宽度为1          、2的元素                           。 torch.Size([1, 2, 5]) inp: tensor([[[2., 3., 9., 1., 5.], [6., 4., 0., 5., 0.]]]) padding=(1, 2),out: tensor([[[3., 2., 3., 9., 1., 5., 1., 9.], [4., 6., 4., 0., 5., 0., 5., 0.]]]) torch.Size([1, 2, 8])

2               、二维反射填充

1)调用方式

输入形状为(N,C,H_in,W_IN)或(C,H_in,W_IN); 输出形状为(N,C,H_out,W_out)或(C,H_out,W_out); padding表示填充尺寸                              ,可为整数或者4元组;padding为整数时         ,输入向量左右上下填充相同的大小;而padding为元组时可自定义向量左右上下分别填充多少; torch.nn.ReflectionPad2d(padding)

2)实例

对于二维填充来说            ,其输入为N个宽度为H*W的数组                             ,而每个元素对应有C个通道                  。此方式填充针对他的高度和宽度进行              ,填充点分别为上                          、下              、左          、右四个边界     。不同的padding类型(整数或元组)        ,决定了四个边界如何填充的方式                            。

(1)padding为整数 inp=torch.tensor([[[[8., 3., 6., 2., 7.], [0., 8., 4., 9., 3.]], [[3., 9., 6., 2., 7.], [7., 8., 4., 6., 2.]], [[1., 9., 0., 1., 4.], [7., 8., 1., 0., 3.]]]]) print(inp.shape) print("inp:",inp) pad=1 out=nn.ReflectionPad2d(padding=pad)(inp) print("padding={},out:".format(pad),out) print(out.shape)

结果分析(图中白线                           、黑线代表以此为轴                            ,红色                  、绿色块代表填充元素):

1)当padding=1时                   ,表示向量以边界为对称轴    ,左     、右                            、上                      、下四个边界均填充宽度为1的元素                      。

填充按照左、右                        、上                          、下的顺序依次填充。 padding=1,out: tensor([[[[8., 0., 8., 4., 9., 3., 9.], [3., 8., 3., 6., 2., 7., 2.], [8., 0., 8., 4., 9., 3., 9.], [3., 8., 3., 6., 2., 7., 2.]], [[8., 7., 8., 4., 6., 2., 6.], [9., 3., 9., 6., 2., 7., 2.], [8., 7., 8., 4., 6., 2., 6.], [9., 3., 9., 6., 2., 7., 2.]], [[8., 7., 8., 1., 0., 3., 0.], [9., 1., 9., 0., 1., 4., 1.], [8., 7., 8., 1., 0., 3., 0.], [9., 1., 9., 0., 1., 4., 1.]]]]) torch.Size([1, 3, 4, 7]) (1)padding为4元组 inp=torch.tensor([[[[8., 3., 6., 2., 7.], [0., 8., 4., 9., 3.]], [[3., 9., 6., 2., 7.], [7., 8., 4., 6., 2.]], [[1., 9., 0., 1., 4.], [7., 8., 1., 0., 3.]]]]) pad=(2,2,1,1) out=nn.ReflectionPad2d(padding=pad)(inp) print("padding={},out:".format(pad),out) print(out.shape)

结果分析:

1)当padding=(2,2,1,1)时                           ,表示向量以左     、右                    、上                          、下边界为对称轴                        ,左          、右               、上                          、下分别填充宽度为2,2,1,1的元素                        。 padding=(2, 2, 1, 1),out: tensor([[[[4., 8., 0., 8., 4., 9., 3., 9., 4.], [6., 3., 8., 3., 6., 2., 7., 2., 6.], [4., 8., 0., 8., 4., 9., 3., 9., 4.], [6., 3., 8., 3., 6., 2., 7., 2., 6.]], [[4., 8., 7., 8., 4., 6., 2., 6., 4.], [6., 9., 3., 9., 6., 2., 7., 2., 6.], [4., 8., 7., 8., 4., 6., 2., 6., 4.], [6., 9., 3., 9., 6., 2., 7., 2., 6.]], [[1., 8., 7., 8., 1., 0., 3., 0., 1.], [0., 9., 1., 9., 0., 1., 4., 1., 0.], [1., 8., 7., 8., 1., 0., 3., 0., 1.], [0., 9., 1., 9., 0., 1., 4., 1., 0.]]]]) torch.Size([1, 3, 4, 9])
声明:本站所有文章,如无特殊说明或标注                      ,均为本站原创发布                          。任何个人或组织                             ,在未征得本站同意时    ,禁止复制              、盗用          、采集                           、发布本站内容到任何网站                  、书籍等各类媒体平台     。如若本站内容侵犯了原著者的合法权益                 ,可联系我们进行处理                    。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
文章在线改写(高效改写,快速生成优质内容——文章改写软件) 无聊时间干什么(无聊的时间可以做什么**-让你月入六位数的副业竟然有这么多!)