首页 > 编程知识 正文

数据库sequence的作用和用法,python中swapcase函数

时间:2023-05-05 17:13:25 阅读:111755 作者:2768

#squeeze函数:从数组形式中删除单维条目。 也就是说,从shape中删除1个维

#unsqueeze ) )是squeeze ) )的逆操作,将可以指定要添加的维的维增加一个。 例如,unsqueeze(a,1 )表示在维1中添加

导入途径

a=torch.rand (2,3,1 ) )。

打印(torch.un squeeze (a,2 ).size ) ) torch.size ([ 2,3,1,1 ] ) )。

打印(a.size ) ) torch.size ([ 2,3,1 ] ) ) ) ) ) 65

打印(a.squeeze ().size ) ) torch.size ([ 2,3 ] ) ) ) ) ) ) )。

print(a.squeeze(0).size ) ) torch.size ([ 2,3,1 ] ) ) )。

print(a.squeeze(-1 ).size () ) ) torch.size ([ 2,3 ] ) ) )。

(打印(a.size ) ) ) torch.size ([ 2,3,1 ] ) ) ) ) ) ) )

print(a.squeeze(-2 ).size ) ) torch.size ([ 2,3,1 ] ) )。

print(a.squeeze(-3 ).size () ) torch.size ([ 2,3,1 ] ) ) )。

打印(a.squeeze (1).size ) ) torch.size ([ 2,3,1 ] ) ) )。

print(a.squeeze(2).size ) ) torch.size ([ 2,3 ] ) ) )。

print(a.squeeze(3).size )运行时错误: dimensionoutofrange (expectedtobeinrangeof [-3,2 ],but got 3) )

print(a.unsqueeze(.size ) ) #TypeError: unsqueeze ) ) missing1requiredpositionalarguments 3360 ' dim '

print(a.unsqueeze(-3 ).size ) ) torch.size ([ 2,1,3,1 ] ) )。

print(a.unsqueeze(-2 ).size ) ) torch.size ([ 2,3,1,1 ] )。

print(a.unsqueeze(-1 ).size ) ) torch.size ([ 2,3,1,1 ] )。

print(a.unsqueeze(0).size ) ) torch.size ([ 1,2,3,1 ]

打印(a.un squeeze (1).size ) ) torch.size ([ 2,1,3,1 ] ) )。

打印(a.un squeeze (2).size ) ) torch.size ([ 2,3,1,1 ] ) ) )。

print(a.unsqueeze(3).size ) ) torch.size ([ 2,3,1,1 ] )。

打印(torch.un squeeze (a,3 ) )

b=torch.rand (2,1,3,1 ) )。

print(b.squeeze ().size ) ) torch.size ([ 2,3 ] ) )。

补充说明: pytorch中的unsqueeze ()、squeeze ()、expand ()、repeat ()、view ()和cat () )函数的总结

学习Bert模型时,必须使用pytorch执行tensor操作。 因为不熟悉pytorch和tensor,所以pytorch中常用的tensor操作unsqueeze (,squeeze )、expand )、view

1、unsqueeze ()和squeeze () ) )。

torch.unsqueeze(input,dim,out=None ) Tensor

unsqueeze ()的作用是增加给定tensor的维度,unsqueeze ) ) dim是在维度编号为dim的地方向tensor添加一维度。 例如,维度为Torch.size([768]的tensor怎么办?Torch.size ) [ 1,768,1 ]? 可以访问unsqueeze ()直接访问代码。

a=Torch.Randn(768 ) )。

打印(a.shape ) #Torch.size ) ([768]

a=a.unsqueeze(0) ) ) ) ) ) ) ) ) ) )。

print(a.shape ) #Torch.size([1,768]

a=a.unsqueeze(2) ) ) ) ) ) ) ) ) ) ) )。

print(a.shape ) # torch.size ([ 1,768,1 ] ) ) ) ) ) ) ) )。

也可以直接使用链式编程。

a=Torch.Randn(768 ) )。

打印(a.shape ) #Torch.size ) ([768]

>a=a.unsqueeze(1).unsqueeze(0)

print(a.shape) #torch.Size([1, 768, 1])

tensor经过unsqueeze()处理之后,总数据量不变;维度的扩展类似于list不变直接在外面加几层[]括号。

torch.squeeze(input, dim=None, out=None) → Tensor

squeeze()的作用就是压缩维度,直接把维度为1的维给去掉。形式上表现为,去掉一层[]括号。

同时,输出的ssdlc与原ssdlc共享内存,如果改变其中的一个,另一个也会改变。

a=torch.randn(2,1,768)

print(a)

print(a.shape) #torch.Size([2, 1, 768])

a=a.squeeze()

print(a)

print(a.shape) #torch.Size([2, 768])

图片中的维度信息就不一样,红框中的括号层数不同。

注意的是:squeeze()只能压缩维度为1的维;其他大小的维不起作用。

a=torch.randn(2,768)

print(a.shape) #torch.Size([2, 768])

a=a.squeeze()

print(a.shape) #torch.Size([2, 768])

2、expand()

这个函数的作用就是对指定的维度进行数值大小的改变。只能改变维大小为1的维,否则就会报错。不改变的维可以传入-1或者原来的数值。

torch.Tensor.expand(*sizes) → Tensor

返回ssdlc的一个新视图,可以将ssdlc的单个维度扩大为更大的尺寸。

a=torch.randn(1,1,3,768)

print(a)

print(a.shape) #torch.Size([1, 1, 3, 768])

b=a.expand(2,-1,-1,-1)

print(b)

print(b.shape) #torch.Size([2, 1, 3, 768])

c=a.expand(2,1,3,768)

print(c.shape) #torch.Size([2, 1, 3, 768])

可以看到b和c的维度是一样的

第0维由1变为2,可以看到就直接把原来的tensor在该维度上复制了一下。

3、repeat()

repeat(*sizes)

沿着指定的维度,对原来的tensor进行数据复制。这个函数和expand()还是有点区别的。expand()只能对维度为1的维进行扩大,而repeat()对所有的维度可以随意操作。

a=torch.randn(2,1,768)

print(a)

print(a.shape) #torch.Size([2, 1, 768])

b=a.repeat(1,2,1)

print(b)

print(b.shape) #torch.Size([2, 2, 768])

c=a.repeat(3,3,3)

print(c)

print(c.shape) #torch.Size([6, 3, 2304])

b表示对a的对应维度进行乘以1,乘以2,乘以1的操作,所以b:torch.Size([2, 1, 768])

c表示对a的对应维度进行乘以3,乘以3,乘以3的操作,所以c:torch.Size([6, 3, 2304])

a:

b

c

4、view()

tensor.view()这个函数有点类似reshape的功能,简单的理解就是:先把一个tensor转换成一个一维的tensor,然后再组合成指定维度的tensor。例如:

word_embedding=torch.randn(16,3,768)

print(word_embedding.shape)

new_word_embedding=word_embedding.view(8,6,768)

print(new_word_embedding.shape)

当然这里指定的维度的乘积一定要和原来的tensor的维度乘积相等,不然会报错的。16*3*768=8*6*768

另外当我们需要改变一个tensor的维度的时候,知道关键的维度,有不想手动的去计算其他的维度值,就可以使用view(-1),pytorch就会自动帮你计算出来。

word_embedding=torch.randn(16,3,768)

print(word_embedding.shape)

new_word_embedding=word_embedding.view(-1)

print(new_word_embedding.shape)

new_word_embedding=word_embedding.view(1,-1)

print(new_word_embedding.shape)

new_word_embedding=word_embedding.view(-1,768)

print(new_word_embedding.shape)

结果如下:使用-1以后,就会自动得到其他维度维。

需要特别注意的是:view(-1,-1)这样的用法就会出错。也就是说view()函数中只能出现单个-1。

5、cat()

cat(seq,dim,out=None),表示把两个或者多个tensor拼接起来。

其中 seq表示要连接的两个序列,以元组的形式给出,例如:seq=(a,b), a,b 为两个可以连接的序列

dim 表示以哪个维度连接,dim=0, 横向连接 dim=1,纵向连接

a=torch.randn(4,3)

b=torch.randn(4,3)

c=torch.cat((a,b),dim=0)#横向拼接,增加行 torch.Size([8, 3])

print(c.shape)

d=torch.cat((a,b),dim=1)#纵向拼接,增加列 torch.Size([4, 6])

print(d.shape)

还有一种写法:cat(list,dim,out=None),其中list中的元素为tensor。

tensors=[]

for i in range(10):

tensors.append(torch.randn(4,3))

a=torch.cat(tensors,dim=0) #torch.Size([40, 3])

print(a.shape)

b=torch.cat(tensors,dim=1) #torch.Size([4, 30])

print(b.shape)

结果:

torch.Size([40, 3])

torch.Size([4, 30])

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。