expand和unsqueeze在一些情况使用的含义

情况一

input:

1
2
3
4
5
6
import torch

# a 模拟的是: batch_size: 2, sequence_length:3, feature: 4
a = torch.arange(24).reshape(2, 3, 4)
# b 代表的是: feature: 4 * 4
b = a.unsqueeze(2).expand(-1, -1, 4, -1) # shape: torch.Size([2, 3, 4, 4])

output:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

a[0]
>>> tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])


b[0]

>>>tensor([[[ 0, 1, 2, 3],
[ 0, 1, 2, 3],
[ 0, 1, 2, 3],
[ 0, 1, 2, 3]],
[[ 4, 5, 6, 7],
[ 4, 5, 6, 7],
[ 4, 5, 6, 7],
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[ 8, 9, 10, 11],
[ 8, 9, 10, 11],
[ 8, 9, 10, 11]]])

换种说法就是:

a: [B, L, F]
b: [B, L, F, F]

每个字对应一个[F, F]的矩阵
这个矩阵的第i行第j列的元素的含义是:上一时刻tag为i, 这一时刻tag为j的分数。比如应用到一阶马尔可夫相关的模型中。

情况二(这种情况没真实测试过,需谨慎对待)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# b 代表的是: sequence length: 3 * 3
b = a.unsqueeze(1).expand(-1, 3, -1, -1) # shape: torch.Size([2, 3, 3, 4])


b[0]

tensor([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]]])

即这个长度为3的句子形成一个首尾的矩阵,最后一维代表相关的概率。

比如在嵌套ner任务中,

0.030.020.050.9
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值