some of the strides of a given numpy array are negative:flip 后先复制再 from_numpy

简介: PyTorch `torch.from_numpy()` 不支持负步长(如 `np.flip` 生成的视图),会报错。解决方法:① `.copy()` 或 `np.ascontiguousarray()` 转为正步长;② 改用 `torch.flip()` 在 Tensor 层翻转。注意图像轴向、标注同步及 Dataset 中提前处理,避免 collate 阶段出错。(239字)

原帖在 np.flip 或 np.rot90 结果上调用 torch.from_numpy 失败:

RuntimeError: some of the strides of a given numpy array are negative. This is currently not supported, but will be added in future releases.

负步长是内存访问方向,不是数值符号

np.flip 可能只是沿反向读取同一块存储,array.strides 因而含负数。把图像像素转正或改 dtype 不会改变这种布局。应在从 NumPy 进入 Tensor 的边界处理视图,保留原来翻转的增强含义。

NumPy 的翻转可以生成负步长视图,数据未必复制。这里要检查的是数组的 strides,不是像素中有负值。

下面是独立的最小示例:

import numpy as np
import torch
x = np.arange(24, dtype=np.float32).reshape(3, 4, 2)
flipped = np.flip(x, axis=0)
print("josh050608")
print("shape/strides:", flipped.shape, flipped.strides)
print("contiguous:", flipped.flags.c_contiguous)
array = flipped.copy()
tensor = torch.from_numpy(array)
assert np.array_equal(tensor.numpy(), flipped)

对原题可直接改成 torch.from_numpy(np.flip(x, axis=0).copy())。也可在通用数据入口对需要转换的视图调用 np.ascontiguousarray,并检查转换后的步长为受支持布局;明确的 .copy() 更直接表达这里要复制翻转结果。

另一条路径是先从正常数组建立 Tensor,再使用 torch.flip(tensor, dims=(0,)),把翻转留在 PyTorch 中。它与 NumPy 负步长视图在存储行为上并不相同,不能依赖两者一定共享同一份内存。

如果负步长出现在 Dataset 的图像增强中,把复制放在 from_numpy 前,而不是等默认 collate 报错后再修。验证形状与翻转顺序正确、首尾样本确实交换;不要通过去掉翻转来悄悄改变训练增强。原错误里的“未来会支持”是历史措辞,不能作为当前版本已支持的保证。

同时验证布局和翻转后的顺序

下面扩展到两种翻转方向,复制后比较值与首尾位置。CPU 即可运行:

import numpy as np
import torch
source = np.arange(12, dtype=np.float32).reshape(3, 4)
for axis in (0, 1):
    view = np.flip(source, axis=axis)
    assert any(stride < 0 for stride in view.strides)
    contiguous = view.copy()
    assert all(stride >= 0 for stride in contiguous.strides)
    tensor = torch.from_numpy(contiguous)
    assert np.array_equal(tensor.numpy(), view)
    reference = torch.flip(torch.from_numpy(source), dims=(axis,))
    assert torch.equal(tensor, reference)
    print("axis/strides:", axis, view.strides, contiguous.strides)

真实图像若是 HWC,左右翻转应按 W 对应的轴;若是 CHW,轴号不同。复制解决布局支持,不能替你判断翻转方向是否正确。分割或检测增强还要同步变换掩码、框或关键点。

在 Dataset.getitem 的 from_numpy 前统一做这次布局处理,可避免错误在 DataLoader 默认组批中才暴露。若后续还会对数组原地修改,要同时考虑 from_numpy 与数组共享存储的行为,必要时明确保留独立副本。

最终检查 shape、dtype、像素顺序以及标注同步,而不是仅确认 strides 不再为负。原错误的“未来将支持”是当时文字,应通过实际版本验证,不能视为当前安装的承诺。

参考:原始求助帖;技术依据:torch.from_numpy(2.5)、NumPy 连续数组。

相关文章
|
10天前
|
Linux 开发工具 iOS开发
Codex保姆级教程(下载+安装+登录+使用,含所有版本,2026最新)
Codex是OpenAI推出的开源AI编程智能体,本地运行,可理解整个代码库,支持自然语言指令改代码、执行命令、跑测试、修Bug,兼容Win/macOS/Linux。(239字)
4015 20
|
11天前
|
JavaScript API iOS开发
DeepSeek Harness下载、安装、配置一篇搞定(2026整理,送常用插件)
DeepSeek Harness(DSH)是DeepSeek于2026年开源的MIT协议AI Agent框架,支持插件化组装模型、工具、沙箱与UI,兼容主流大模型。本文提供免Node.js的桌面端安装包(Win/macOS),含详细图文教程及热门插件推荐。
4138 49
|
11天前
|
iOS开发 Docker MacOS
【2026实测】Docker Desktop下载、安装、汉化、配置教程(附官网安装包)
Docker Desktop 是 Docker 官方推出的桌面容器管理工具,集成引擎、CLI、图形界面与 Kubernetes,支持 Win/macOS/Linux。2026 最新版 4.88.1 强化 ARM 原生运行、镜像加速及资源可视化,附中文汉化与国内镜像配置指南。
1982 7
|
6天前
|
云安全 人工智能 安全
|
6天前
|
存储 弹性计算 人工智能
2026 年阿里云双十一活动入口攻略,新客服务器优惠通道、三大会场入口梳理
综合来看,2026年阿里云双十一活动入口清晰: 阿里云轻量应用服务器、阿里云ECS云服务器、阿里云GPU云服务器、阿里云百炼大模型服务平台 活动会场、综合权益中心、99计划专场三大入口覆盖服务器、AI权益与续费特价;新用户通过控制台首页banner、权益中心、产品页三处路径进入专属专场,老用户通过控制台弹窗和费用中心权益中心进入老客专区,企业用户做企业实名后解锁专属满减与阶梯折扣。
819 0
|
5天前
|
Linux 开发工具 iOS开发
2026最新codex下载安装保姆级使用教程(下载+安装+登录+使用,含所有历史版本)
本文详解OpenAI Codex国内快速上手指南:提供Win/macOS/Linux全平台免安装包、npm/Homebrew等多方式安装、账号/API Key双登录、简体中文切换,覆盖下载、安装、汉化、使用及高频避坑(如微软商店失败、npm超时等),10分钟即可跑通。
1097 2
|
12天前
|
安全 算法 定位技术
《高性价比人生指南》完整原版:普通人用最少的资源,过好这一生的底层逻辑~How To Live Better
📖《高性价比人生指南》是一份基于实证、拒绝焦虑的生存手册,倡导以“人生时薪”为视角,重新计算时间、金钱与精力的成本与收益。它不承诺逆袭,只教人算清账:省下的钱若耗掉时间便亏;买体验比买物品更值;睡眠是最高杠杆的健康投资;关系贵在情绪价值而非表面热络;学习重在改变行为而非自我安慰。核心理念:用低成本、高回报的微小行动,换取长期的选择权——不是成为谁,而是掌控自己人生的主动权。
2145 6
|
云安全 安全 网络安全
|
24天前
|
人工智能 API 开发工具
DeepSeek Harness 神插件:白嫖 13 家大厂模型
`dsh-our-free-model` 是 DeepSeek Harness 神级插件:零配置、零API Key、零账号,聚合13家大厂免费模型(含DeepSeek V4.1 Flash、Kimi K3等),支持本地网关、用量看板与自动降级,真正实现“白嫖即用”。
4341 58