x_test = torch.tensor([[4,3,7,2,9],[1,2,0,7,3],[10,12,21,11,23]]) ids_shuffle = torch.argsort(x_test, dim=1) # ascend: small is keep, large is remove ids_restore = torch.argsort(ids_shuffle, dim=1) ids_keep = ids_shuffle[:, :3] x_masked = torch.gather(x_test, dim=1, index=ids_keep.unsqueeze(-1).repeat(1, 1, 3)) 报错 RuntimeError: Index tensor must have the same number of dimensions as input tensor
时间: 2024-01-17 15:04:05 浏览: 226
动手学深度学习第二次打卡2/18
这个错误是由于torch.gather函数的index参数的维度不匹配导致的。
在你的代码中,x_test是一个形状为[3, 5]的张量,而ids_keep是一个形状为[3, 3]的张量。在torch.gather函数中,index参数的维度应该和input参数的维度一致,或者在某些维度上是1。
要解决这个问题,你可以使用unsqueeze函数在ids_keep张量的最后一个维度上添加一个维度,使其形状变为[3, 3, 1]。这样,再将其通过repeat函数复制到形状为[3, 3, 5],以便和x_test的维度匹配。修改后的代码如下:
```python
x_test = torch.tensor([[4,3,7,2,9],[1,2,0,7,3],[10,12,21,11,23]])
ids_shuffle = torch.argsort(x_test, dim=1) # ascend: small is keep, large is remove
ids_restore = torch.argsort(ids_shuffle, dim=1)
ids_keep = ids_shuffle[:, :3]
ids_keep = ids_keep.unsqueeze(-1).repeat(1, 1, 1) # 添加一个维度,并复制到和x_test维度相同
x_masked = torch.gather(x_test, dim=1, index=ids_keep)
```
这样修改后,你就可以成功执行torch.gather函数,并得到正确的结果。
阅读全文