c++ - 从Pytorch C++中的c10::Dict <c10::IValue,c10::IValue>获取值

标签 c++ pytorch torch libtorch torchscript

我在Pytorch C++前端上使用了TorchScript模型。
Python中的模型将output dict返回为Dict[str, List[torch.Tensor]]
当我在C++中使用它时,它将返回c10::Dict<c10::IValue, c10::IValue>。这个Python代码等效于什么:

value_a = output['key_a']
value_b = output['key_b']
在C++中从c10::Dict获得值(value)?
我已经尝试过了,但是没有用。
torch::IValue key_a("key_a");
torch::IValue key_b("key_b");
c10::IValue value_a = output[key_a];
c10::IValue value_b = output[key_b];
std::cout << value_a << std::endl;
std::cout << value_b << std::endl;
错误:
error: type 'c10::Dict<c10::IValue, c10::IValue>' does not provide a subscript operator

最佳答案

您可以找到c10:Dict here的头文件。您想要的是at方法(defined here),因此:

auto value_a = output.at(key_a);
应该做到的。
另外,您不必显式创建torch::IValue key_ay("key_a"),这应该足够了:
auto value_a = output.at("key_a");

关于c++ - 从Pytorch C++中的c10::Dict <c10::IValue,c10::IValue>获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63917001/

相关文章:

c++ - 如何将 std::string 转换为 BSTR*?

python - pytorch 或 Huggingface/transformer 标签代码中的何处将 "renamed"放入标签中?

python - 将 cv2.umat 转换为 numpy 数组

c++ - 单位球体 C++ 上 N 个相互排斥点的蒙特卡罗(可能是模拟退火?)方法

c++ - 使用QAbstractButton::autoRepeat时如何区分按下、释放和长按

c++ - C++中的静态公共(public)值函数

python-3.x - 使用排序索引重新排列 3D 数组?

lua - 在 Torch 中可视化神经网络层,无需 itorch

python - 在 PyTorch 中沿给定轴进行洗牌

python - 如何在循环中为 pytorch 神经网络中的层创建变量名称