错误 At least one stride in the given numpy array is negative, and tensors with negative strides are n

2022-08-09 15:16:56 浏览数 (1)

在训练 Pytorch 网络时遇到错误 At least one stride in the given numpy array is negative, and tensors with negative strides are not currently supported., 本文记录原因与解决方案。

问题复现

  • 在numpy 图像数据转为 torch.tensor 之前使用 numpy 执行内部形变的操作,常见的有:
代码语言:txt复制
- 通道转换
代码语言:javascript复制
image = image[:,:,::-1]

代码语言:txt复制
- 图像翻转
代码语言:javascript复制
image = np.fliplr(image)
# or
image = np.flipud(image)

  • 此类操作之后经过 Pytorch 的 Dataloader,读取tensor 时会报错
代码语言:javascript复制
ValueError: At least one stride in the given numpy array is negative, and tensors with negative strides are not currently supported. (You can probably work around this by making a copy of your array with array.copy().)

问题原因

  • 输入网络的 Tensor 需要是内存连续的
  • 但是 numpy 上述变换后为了速度考虑不会改变数据内存,这就导致拿到的数据在内存中不连续,导致错误

解决方案

  • 可以按照报错中建议的方式
代码语言:javascript复制
image = image.copy()

  • 也可以正经解决 numpy 内存连续的问题
代码语言:javascript复制
image = np.ascontiguousarray(image)

参考资料

  • https://cloud.tencent.com/developer/article/2066974

0 人点赞