【问题标题】:Why does torch.Tensor have a libjpeg field?为什么 torch.Tensor 有一个 libjpeg 字段?
【发布时间】:2015-04-15 06:21:27
【问题描述】:

我看到了:

./install/share/lua/5.1/image/init.lua:   return torch.Tensor().libjpeg.size(filename)

Tensor 如何获取字段 libjpeg?我没有在 Tensor.lua 中看到它。

有关更多上下文,我正在尝试调试此错误:

 /Users/un/torch/install/share/lua/5.1/image/init.lua:140: attempt to index field 'libjpeg' (a nil value)
stack traceback:
    /Users/un/torch/install/share/lua/5.1/image/init.lua:140: in function 'loader'
    /Users/un/torch/install/share/lua/5.1/image/init.lua:276: in function 'load'
    /Users/un/torch/install/share/lua/5.1/image/init.lua:1067: in function 'lena'
    [string "image.lena();"]:1: in main chunk
    [C]: in function 'xpcall'
    /Users/un/torch/install/share/lua/5.1/trepl/init.lua:588: in function 'repl'
    .../torch/install/lib/luarocks/rocks/trepl/scm-1/bin/th:185: in main chunk
    [C]: at 0x0104de8640    

【问题讨论】:

    标签: lua torch


    【解决方案1】:

    Torch 包中的一个常见做法是使用张量表作为命名空间。这是一个非常有用的技巧,可用于快速而肮脏的模板化函数分派。 例如,如果你加载 nn 包,你会发现函数

    torch.DoubleTensor.nn.L1Cost_updateOutput
    torch.FloatTensor.nn.L1Cost_updateOutput
    

    这些通常根据输入张量的类型来调用。例如:

    input = torch.FloatTensor()
    input.nn.L1Cost_updateOutput(...) 
    

    这是您使用 torch.Tensor.libjpeg* 观察到的结果 如果您使用图像加载包,那么您会注意到会有 torch.FloatTensor.libjpeg*torch.DoubleTensor.libjpeg*

    我怀疑您可能已将默认张量类型设置为 torch.CudaTensor,此时您会观察到此错误。 因为没有为 Cuda 张量定义图像包的函数,所以函数 torch.CudaTensor.libjpeg* 将不存在。

    您的解决方案是将默认张量类型设置为 FloatTensor 或 DoubleTensor,并根据需要创建任何 Cuda 张量。

    【讨论】:

      猜你喜欢
      • 2019-01-25
      • 1970-01-01
      • 2022-09-23
      • 2021-06-06
      • 2018-12-10
      • 1970-01-01
      • 2016-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多