You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

torchvision中_new_empty_tensor的纯torch替代方案及版本适配问题

关于L-DETR中_new_empty_tensor导入报错的问题解答

1. 包含_new_empty_tensor的最后一版torchvision

_new_empty_tensor是torchvision的私有内部函数,在torchvision 0.13.0版本中被移除。最后包含该函数的稳定版本是torchvision 0.12.x系列(比如0.12.0、0.12.1)。如果要使用仓库原始代码,建议搭配torch 1.12.x + torchvision 0.12.x的版本组合。

2. 纯torch函数替代方案及注意事项

完全可以用原生torch函数替代,原函数_new_empty_tensor(input, output_shape)的核心逻辑是创建指定形状的空张量,同时继承输入张量的设备、数据类型、布局、梯度属性。替代代码如下:

def _new_empty_tensor(input, output_shape):
    return torch.empty(
        output_shape,
        device=input.device,
        dtype=input.dtype,
        layout=input.layout,
        requires_grad=input.requires_grad
    )

需要注意的点:

  • 确保output_shape是合法的张量形状(由非负整数组成的元组/列表),否则torch.empty会抛出错误,这和原函数行为一致。
  • 必须完整继承输入张量的所有属性,避免出现设备不匹配(如CPU张量生成GPU张量)、数据类型不一致(如float32生成float64)等问题,否则会导致后续计算报错。

3. torchvision引入这类函数的原因

torchvision虽然主打图像预处理、视觉模型等上层功能,但内部的视觉任务模块(比如目标检测、语义分割的ops组件)需要大量重复的张量操作逻辑。这类私有函数的作用是封装通用的张量操作逻辑,确保内部代码的一致性,减少重复代码,同时统一处理张量的设备、类型等细节,避免每个模块都手动编写冗余代码。

另外要明确:_new_empty_tensor是torchvision的私有API,并非对外暴露的用户接口,所以torchvision团队不会保证其跨版本兼容性,这也是不同版本间无法导入的原因。

内容的提问来源于stack exchange,提问作者Eypros

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 07:52:40