这篇文章主要介绍了Pytorch中expand()的使用(扩展某个维度),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
Pytorch expand()的使用
有两点需要注意,无论是 expand() 还是 expand_as():文章源自设计学徒自学网-http://www.sx1c.com/38757.html
1.只能在第0维扩展一个维数,比如原来是是(1,3,4)==》(2,1,3,4),而在其他维度扩展不可以(1,3,4)==》(1,2,3,4)【错误】文章源自设计学徒自学网-http://www.sx1c.com/38757.html
2.如果不增加维数,只是增加维度,要增加的原维度必须是1才可以在该维度增加维度,其他值均不可以文章源自设计学徒自学网-http://www.sx1c.com/38757.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
import torch #1 x = torch.randn( 2 , 1 , 1 ) #为1可以扩展为3和4 x = x.expand( 2 , 3 , 4 ) print ( 'x :' , x.size()) >>> x : torch.Size([ 2 , 3 , 4 ]) #2 #扩展一个新的维度必须在最前面,否则会报错 x = x.expand( 2 , 3 , 4 , 6 ) >>> RuntimeError: The expanded size of the tensor ( 3 ) must match the existing size ( 2 ) at non - singleton dimension 1. x = x.expand( 6 , 2 , 3 , 4 ) >>> x : torch.Size([ 6 , 2 , 3 , 4 ]) #3 #某一个维度为-1表示不改变该维度的大小 x = x.expand( 6 , - 1 , - 1 , - 1 ) >>> x : torch.Size([ 6 , 2 , 1 , 1 ]) |
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import torch #1 x = torch.randn( 2 , 1 , 1 ) #原维度为1可以扩展为其他维度 y = torch.randn( 2 , 3 , 3 ) x = x.expand_as(y) print ( 'x :' , x.size()) >>> x : torch.Size([ 2 , 3 , 3 ]) #2 x = torch.randn( 2 , 2 , 2 ) #原维度为其他不是1的值不可以扩展为其他维度 y = torch.randn( 2 , 3 , 4 ) x = x.expand_as(y) print ( 'x :' , x.size()) >>> RuntimeError: The expanded size of the tensor ( 4 ) must match the existing size ( 2 ) at non - singleton dimension 2. Target sizes: [ 2 , 3 , 4 ]. |
Pytorch expand()函数
返回tensor的一个新视图
单个维度扩大为更大的尺寸。文章源自设计学徒自学网-http://www.sx1c.com/38757.html
tensor也可以扩大为更高维,新增加的维度将附在前面。文章源自设计学徒自学网-http://www.sx1c.com/38757.html
扩大tensor不需要分配新内存,只是仅仅新建一个tensor的视图,其中通过将stride设为0,一维将会扩展位更高维。文章源自设计学徒自学网-http://www.sx1c.com/38757.html
任何一个一维的在不分配新内存情况下可扩展为任意的数值。文章源自设计学徒自学网-http://www.sx1c.com/38757.html
文章源自设计学徒自学网-http://www.sx1c.com/38757.html
note:使用expand()函数的时候
x自身不会改变,因此需要将结果重新赋值。文章源自设计学徒自学网-http://www.sx1c.com/38757.html
以上为个人经验,希望能给大家一个参考。文章源自设计学徒自学网-http://www.sx1c.com/38757.html
评论