程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了冒泡 3-D 张量 PyTorch大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决冒泡 3-D 张量 PyTorch?

开发过程中遇到冒泡 3-D 张量 PyTorch的问题如何解决?下面主要结合日常开发的经验,给出你关于冒泡 3-D 张量 PyTorch的解决方法建议,希望对你解决冒泡 3-D 张量 PyTorch有所启发或帮助;

我在尝试将以下函数转换为仅操作张量的函数时遇到了一些问题。

def valID_sequence_output(sequence_output,valID_mask):
    bs,max_len,feat_dim = sequence_output.shape
    valID_output = torch.zeros(bs,feat_dim,dtype=torch.float32)
    for i in range(bs):
        jj = -1
        for j in range(max_len):
            if valID_mask[i][j].item() == 1:
                jj += 1
                valID_output[i][jj] = sequence_output[i][j]
    return valID_output

可以按如下方式创建输入张量:

size = ((2,5,2))
sequence_output = torch.randint(0,250,size=sizE)
valID_mask = torch.randint(0,2,size=size[:2])

我的主要目标是“冒泡”sequence_output 的非空行。例如,sequence_output 等于:

tensor([[[  0,0],[ 15,47],[124,230],[ 0,[  65,31]],[[  0,[  0,[139,228],[224,205]]])

我正在尝试获得以下张量:

tensor([[[ 15,[ 65,31],0]],[[139,205],0]]])

如果有人对如何做到这一点有建议,我将不胜感激:D

解决方法

我设法想出了一个非常讨厌的解决方案(他可能不是最理想的),方法是构建一个由零和一组成的矩阵 A,在执行矩阵乘法时将交换 X 的行......

def vso(seq_out,valid_mask):
    X = torch.where(valid_mask.unsqueeze(-1) == 1,seq_out,torch.zeros_like(seq_out))
    bs,max_len,_ = X.shape
    tu = torch.unique(torch.nonzero(X)[:,:2],dim=0)
    batch_axis = tu[:,0]
    rows_axis = tu[:,1]
    a = torch.arange(bs).repeat(batch_axis.shapE).reshape(batch_axis.shape[0],-1).T
    T = torch.cumsum(batch_axis == a,dim=1) - 1
    cols_axis = T[batch_axis,torch.arange(batch_axis.shape[0])]
    A = torch.zeros((bs,max_len))
    A[(batch_axis,cols_axis,rows_axis)] = 1
    valid_output = torch.matmul(A,X)
    return valid_output

仍在寻找更好的答案!

大佬总结

以上是大佬教程为你收集整理的冒泡 3-D 张量 PyTorch全部内容,希望文章能够帮你解决冒泡 3-D 张量 PyTorch所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。