首页 > 解决方案 > 张量不能用 unsqueeze(2) 自动分级

问题描述

rho = base[0][:,1:,:]
mu = base[1][:,1:,:]
diff_time = (time[:, 1:] - time[:, :-1]) * non_pad_mask[:, 1:]
temp_time = diff_time.unsqueeze(2) * \
           torch.rand([*diff_time.size(), num_samples], device=data.device) 
temp_time /= (time[:, :-1] +1).unsqueeze(2) 
all_base = torch.zeros(rho.size())
for i in range(rho.size()[2]):
    slice_of_mu = mu.clone()[:,:,i]
    slice_of_mu = slice_of_mu.unsqueeze(2)
    slice_of_rho = rho.clone()[:,:,i]
    slice_of_rho = slice_of_rho.unsqueeze(2)
    all_base[:,:,i] = all_base[:,:,i] + ( slice_of_mu * slice_of_rho * temp_time ^ ( slice_of_rho - 1 ) )

rho 和 mu 的大小为 [16,99,5],temp_time 的大小为 [16,99,100],我想计算 all_base 的值,如 for 循环所示,我对这些张量进行切片、解压缩和变形以确保它们的尺寸是一致的,但我在最后一行得到一个错误:

bitwise_xor():带有 out=... 参数的函数不支持自动微分,但其中一个参数需要 grad。

文件“.......”,第 47 行,compute_integral_unbiased all_base[:,:,i] = all_base[:,:,i] + ( slice_of_mu * slice_of_rho * temp_time ^ ( slice_of_rho - 1 ) )

我不知道如何解决这个问题。你能给我一些帮助吗?非常感谢。

标签: pytorchautograd

解决方案


推荐阅读