В чем разница между нулевым размерным тензором и элементом? - PullRequest
2 голосов
/ 03 ноября 2019

Этот фрагмент кода занимает много памяти:

int len = Input.size(0);
at::Tensor outputs = torch::zeros({ len });
for (int SliceStart = 0; SliceStart < len; SliceStart += SliceSize)
{
  std::vector<torch::jit::IValue> InputVec;
  InputVec.push_back(Input.slice(0, SliceStart, SliceEnd));
  output = module.forward(InputVec).toTensor();
  for (int i = SliceStart; i < SliceEnd; ++i)
    outputs[i] = output[i - SliceStart];
}

Это не так (примечание item() в последнем назначении)

int len = Input.size(0);
at::Tensor outputs = torch::zeros({ len });
for (int SliceStart = 0; SliceStart < len; SliceStart += SliceSize)
{
  std::vector<torch::jit::IValue> InputVec;
  InputVec.push_back(Input.slice(0, SliceStart, SliceEnd));
  output = module.forward(InputVec).toTensor();
  for (int i = SliceStart; i < SliceEnd; ++i)
    outputs[i] = output[i - SliceStart].item();
}

Почему это так?

...