火炬[cpuType]的语法解释

时间:2017-07-13 15:19:59

标签: lua torch resnet

我首先在文件dataloader.lua of fb.resnest.torch中看到lua中的用法torch[cpuType]

batch = torch[cpuType](sz, nCrops, table.unpack(imageSize))

我没有找到任何语法解释。怎么理解呢?

PS:cpuType在文件中定义,我猜是self.cpuType

更新:在我的测试中,torch['FloatTensor']相当于torch.FloatTensor

2 个答案:

答案 0 :(得分:0)

根据我对pytorch的了解,这与Lua Torch非常相似(我也尝试过lua torch),我会说它指定了你想要存储这个张量的位置。注意,火炬不能执行存储两个不同处理单元的操作。有一些方法可以在cpu(net≈ß.cpu())和gpu [net.cuda()]之间移动数据。

答案 1 :(得分:0)

我认为torch.cpuTypecpuType相同。

代码(https://github.com/facebook/fb.resnet.torch/blob/master/dataloader.lua#L51-L57)似乎表示DoubleTensor可以采用多个不同的值,即FloatTensorHalfTensortorch.DoubleTensor。因此,此表示法会创建torch.FloatTensortorch.HalfTensorif cpuType == 'torch.DoubleTensor' then batch = torch.DoubleTensor(sz, nCrops, table.unpack(imageSize)) elseif cpuType == 'torch.FloatTensor' then batch = torch.FloatTensor(sz, nCrops, table.unpack(imageSize)) elseif cpuType == 'torch.HalfTensor' then batch = torch.HalfTensor(sz, nCrops, table.unpack(imageSize)) 。对于像

这样的东西,它是一个更紧凑的表示法
let newData,
  newArgs,
  chain = (data, ...myargs) => {
    if (myargs.length === 0) {
      return data;
    } else {
      newData = myargs[0](data);
      myargs.splice(0, 1);
      newArgs = myargs;
      chain(newData, ...newArgs);
    }
  },
  add1 = (num) => {
    return num + 1;
  };


chain(5, add1, add1, add1);

console.log(newData); // 8