python-pytorch 常用api打卡0.1.080

记录

  • 2024年5月7日12:02:42----0.1.031
  • 2024年5月8日17:03:17----0.1.032
  • 2024年5月17日10:57:37----0.1.034
  • 2024年5月19日15:31:26----0.1.035
  • 2024年5月23日17:44:54----0.1.045
    -2024年5月28日14:39:14----0.1.056
  • 2024年5月29日16:56:27----0.1.060
  • 2024年5月30日13:53:01----0.1.070
  • 2024年4月29日09:20:15----0.1.028
  • 2024年4月29日14:49:31----0.1.029

torch.

torch.bmm

  1. input and mat2 must be 3-D tensors
  2. 输出size:如input size[4,5,6],mat2 size是[4,6,9],那output size是[4,5,9],就是输入的列变为第二个矩阵的列数
  3. 第一个参数第一个和第三个就等于第二个参数的前二维度,否则会报错Expected size for first two dimensions of batch2 tensor to be
    在这里插入图片描述

torch.max

以表达式torch.max(out.view(-1,25),dim=1)为例
1.dim=1时,表示按行计算,有多少就有多少个值
2.dim=0时,表示按列计算,有多少列就有多少个值

如inputsize是【2,3】,所以如果max(inputsize,dim=0),那结果就有3个,如果dim=1,那结果的值只有2个

  1. 如果torch.max(input),参数中没有指定dim,则返回的是value,没有key

torch.matmul

  1. input_d = other_d = 1,结果为[]
  2. input_d = other_d = 2 ,结果为torch.Size([2, 2])
  3. input_d = 1, other_d = 2,input_d 扩展成 (1, 2) 后,(1, 2) * (2, 2) => (1, 2) => (2, )
  4. input_d = 2, other_d = 1,other_d 扩展成 (2,1) 后, (2, 2)*(2,1) => (2,1) => (2, )
  5. input_d = 3 and other_d = 2,矩阵部分:(1, 2) * (2, 1)
  6. input_d = 4 and other_d =3,广播部分:(2, 1, , ) => (2, 2, , )。矩阵部分:(2, 1) * (1, 2)
  7. input_d = 4 and other_d =2,矩阵部分:(2, 1) * (1, 2)

torch.nn

torch.nn.nn.AvgPool2d()

  1. torch.nn.AvgPool2d( kernel_size , stride=None , padding=0 , ceil_mode=False , count_include_pad=True , divisor_override=None )
  2. 函数名字中的2d表示的是池化核kernel_size数据是2维的,如(4,5)表示4行5列的池化核
  3. stride 表示kernel移动步大小,如为1时就是上下左右移动一个
  4. divisor_override就是在普通形式下计算的结果再除以这个值
  5. ceil_mode为True表示不够的要算作一个,即向下取整数;ceil_mode默认是False,当时False时除后多的就舍弃,即向上取整数
  6. 具体size计算
    当stride等于kernel的列值时,直接对应除就可以了
    在这里插入图片描述

torch.nn.MultiheadAttention

3D数据中,batch_first=False情况下:

  1. 输入参数:embed_dim = dims, num_heads = heads, dropout = dropout_pro,batch_first=False,其中需要关注的是dims等于num_heads*嵌入维度
  2. 对于输入数据的要求qkv,三者的embed_dim和batch_size要一致
  3. kv的seq_len和q的seq_len可以不一样,q的代表是目标句子长度,而kv的代表的是源端句子长度
  4. 输出数据的size:attn_output size是【batch_size,target_seq_len,embed_dim】; attn_output_weights size 是【batch_size,target_seq_len,source_seq_len】
  5. 如下示例,参考链接https://pytorch.org/docs/stable/generated/torch.nn.MultiheadAttention.html
# 先决定参数
dims = 256 * 10 # 所有头总共需要的输入维度
heads = 10    # 单注意力头的总共个数
dropout_pro = 0.0 # 单注意力头
 # 传入参数得到我们需要的多注意力头
layer = torch.nn.MultiheadAttention(embed_dim = dims, num_heads = heads, dropout = dropout_pro,batch_first=False)

q = torch.rand((9, 2, 2560))
k=torch.rand(6,2,2560)
v=torch.rand(6,2,2560)
attn_output, attn_output_weights=layer(q,k,v)

# attn_output [seq, batch, embed_dim]  attn_output_weights []
attn_output.size(), attn_output_weights.size()

"""
(torch.Size([9, 2, 2560]), torch.Size([2, 9, 6]))
"""

torch.nn.Flatten

  1. 维度计数是从0开始
  2. m = nn.Flatten()默认从1维开始合并
  3. 合并的维度值,就是这些维度的乘积
  4. 对于数据维度的理解
    如下数据input
    4.1 对于数据-1.1995e+00来说需要input[0][0][0][0],而[0]的个数就是这个数据的“维度”
    4.2 对于数据[-1.1995e+00, 1.6391e+00, -1.2680e+00, 2.5306e-02, 1.8864e-01]来说需要input[0][0][0],是“三维”
tensor([[[[-1.1995e+00,  1.6391e+00, -1.2680e+00,  2.5306e-02,  1.8864e-01],
          [ 6.5537e-01, -3.0261e-01,  6.1051e-01, -3.5670e-01, -3.0462e-01],
          [-2.4055e+00,  9.0808e-01,  6.8750e-01, -4.9038e-01,  5.9194e-01],
          [ 2.4578e+00,  1.5924e+00,  6.7753e-01,  8.1588e-01,  4.2632e-01],
          [ 4.9011e-01, -4.9083e-01,  1.3152e+00, -8.3352e-01,  1.0400e-01]]],


        [[[ 3.0514e-01, -9.6460e-01,  3.7641e-02, -1.8372e-02, -1.7491e+00
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值