【发布时间】:2020-08-02 08:29:46
【问题描述】:
我应该如何定义 ProtoBuf 架构,以便我可以序列化这个形状向量?
std::vector<std::tuple(std::string, torch::Tensor)>
我能找到的只是简单的琐碎示例。我不知道应该如何在 ProtoBuf 架构中定义 torch::Tensor 或 tuple!
【问题讨论】:
-
看这个帖子:github.com/pytorch/pytorch/issues/19025#issuecomment-482308272。一种解决方案是使用
std::stringstream(torch::save()) 转换为std::string,将其序列化为字符串,然后从其中加载并转换回torch::Tensor(torch::load())。 -
@Azeem 非常感谢。但我需要将它们序列化为一个元组而不是单独!
-
嗯,在 ProroBuf 中,您会将它们组合在一起作为一条消息,对吧?请使用您的
.proto定义更新您的问题,这将有助于了解您如何将其可视化。 -
消息中的
key似乎您需要map。示例:map<string, string> lookup = 1;其中键是字符串,值torch::Tensor也是由torch::save()生成的字符串。 -
对。您可以只使用
torch::Tensor的字符串表示形式。map类似于std::unordered_map。这是一个自定义实现。请参阅其 API here。对于重复的键,您可以使用如下内容:godbolt.org/z/qqd6d5.
标签: c++ protocol-buffers tensor libtorch