问题标签 [libtorch]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
270 浏览

libtorch - 使用 nn::sequential 访问权重和偏差

如果我std::vector<torch::nn::Linear> linear_layers;用一些对象定义并填充这个向量torch::nn::Linear,那么我可以通过and访问weightandbias值。其他图层类型也可以使用相同的功能,例如.linear_layers[k].weightlinear_layers[k].biastorch::nn::Conv2d

如果使用创建我的网络nn::sequential然后推回其中一个,Linear或者Conv2d我无法直接访问weightand bias。现在,我的问题是如何在使用后访问每一层的权重和偏差值nn::sequential

谢谢, 阿夫辛

0 投票
0 回答
67 浏览

libtorch - 恢复 NN 前向传递的 const 正确性

我正在尝试使用 pytorch/libtorch 实现一个简单的神经网络。以下示例改编自libtorch cpp 前端教程

请注意,该函数forward已声明const。我正在编写的代码要求 NN 的评估是一个 const 函数,这对我来说似乎是合理的。但是,此代码无法编译。编译器抛出

错误:不匹配调用 '(const torch::nn::Linear) (at::Tensor&)'<br> x = linear1(x);

我已经找到了解决这个问题的方法,通过将图层定义为mutable

所以我的问题是

  1. 为什么在张量上应用层不是const
  2. 正在使用mutable这种方法来解决这个问题,它安全吗?

我的直觉是,在前向传播中,层被组装成一个可用于反向传播的结构,需要一些写入操作。如果这是真的,那么问题就变成了如何在第一步(非const)中组装层,然后在第二步(const)中评估结构。

0 投票
1 回答
1040 浏览

c++ - 如何将张量转换为图像数组?

我想将张量转换为图像数组并使用 tensor.data() 方法。

但它不起作用。

运行时日志如下所示:

加载脚本模块:model_myo_jit.pt

加载脚本模块 DONE Load

图片:patch_6.nii.gz

加载图像完成!

输入大小:128、128、128

将 itk 转换为数组 DONE!

将数组转换为张量完成!

推理完成!

张量 dtype = unsigned char

张量大小 = [1, 1, 96, 96, 96]

开始!

分段错误(核心转储)

为什么以及如何转换?

0 投票
0 回答
562 浏览

linker - 将静态库合并为一个 STATIC 库时的 Libtorch/Pytorch 困境

我有大约 26 个静态库,例如liba.a, libb.a, libc.a, ..., libz.a. 这里有两个问题:

1) 例如liba.a和之间的循环依赖libb.a

2) 一些lib*.a具有未引用的静态全局注册代码,但不应被剥离。

感谢stackoverflow,我设法用 ld 选项解决了上述两个问题 -Wl,--whole-archive -la -lb -lc -ld -le ...(omitted)... -lz -Wl,--no-whole-archive -lpthread -lm -ldl -lrt -fopenmp并且可执行二进制文件有效!ld 链接器问题中也对此进行了解释: --whole-archive 选项

现在我需要将所有 26个组合lib*.a成一个静态库liball.a。还要感谢 stackoverflow,下面的 MRI script.mriliball.a通过命令成功生成ar -M < script.mri

但是,与新组合的静态库链接时出现了问题liball.a

1)使用选项-Wl,--whole-archive -lall -Wl,--no-whole-archive -lpthread -lm -ldl -lrt -fopenmp失败!它产生数千个multiple defined symbols errorundefined symbols error

2)没有选项-Wl,--whole-archive,链接命令-lall -lpthread -lm -ldl -lrt -fopenmp成功生成可执行二进制文件。但是,二进制文件无法执行,抱怨一些设备注册代码错误。我知道这是由于链接时某些 CPU 初始化代码被删减所致。下面是详细的错误

这里也提到了这个问题https://github.com/pytorch/pytorch/issues/14367

解决它的一种方法是使用选择性注册。任何人都可以分享更多细节吗?

这个问题不是如何将两个“ar”静态库合并为一个? MRI 脚本方法来自上述链接的最高投票答案,它不起作用。请删除重复标记,以便人们可以贡献。谢谢。

0 投票
0 回答
83 浏览

c++ - Libtorch 构建失败。在“qlinear_unpack.cpp”中,一个类没有成员“unpack”

更新:我尝试了我队友之前下载的v1.1.0源,然后这个问题就消失了。似乎主分支(190604)存在以下问题。尝试使用标签 v1.1.0 而不是 master。


我从 github 下载了 pytorch 源来构建 libtorch。使用以下命令:

然后运行

然后得到以下错误消息:

如何正确构建 libtorch?

0 投票
2 回答
3963 浏览

c++ - Pytorch/ATen C++中切片张量的等价性

在 Python 中,给定一个二维张量,我们可以使用tensor[:,:2]对矩阵左上角前两个元素的 2x2 矩阵进行切片,例如:

[出去]:

对于 PyTorch 的 ATen,在 C++ 中做这件事的正确方法是什么?

例如,在 LSTM 中,https: //github.com/pytorch/pytorch/blob/master/aten/src/ATen/native/RNN.cpp#L253 有 gate.chunk(4,1) 函数

如果我想做一个gate[:,:2].chunk(2,1)提取门的不同部分,例如auto partial_gates = gates[:,:2].chunk(4, 1);,怎么做?

0 投票
1 回答
1180 浏览

python - 在 LibTorch 中运行从 PyTorch 训练和导出的模型时获得的不正确结果

我正在尝试使用 LibTorch 导出经过训练的模型以及权重以在 C++ 中进行推理。但是,输出张量结果不匹配。

输出张量的形状是相同的。

但是会生成一些警告,我认为这可能会导致生成不正确的结果。

/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:137:TracerWarning:将张量转换为 Python 索引可能会导致跟踪不正确。我们无法记录 Python 值的数据流向,所以以后这个值会被当作一个常量来处理。这意味着跟踪可能不会推广到其他输入!/usr/local/lib/python3.6/dist-packages/torch/tensor.py:435:RuntimeWarning:迭代张量可能会导致跟踪不正确。传递不同形状的张量不会改变执行的迭代次数(并可能导致错误或默默地给出不正确的结果)。'不正确的结果)。',category=RuntimeWarning)

以下是生成输出张量的 LibTorch 代码

有没有人尝试在 LibTorch 中使用经过训练的 PyTorch 模型?

0 投票
2 回答
1099 浏览

pytorch - LibTorch,将 deeplabv3_resnet101 转换为 c++

我正在尝试使用 PyTorch网站上的此示例代码来转换 Python 模型以在 PyTorch c++ api (LibTorch) 中使用。

此示例工作正常,并按预期保存文件。当我切换到这个模型时:

model = models.segmentation.deeplabv3_resnet101(pretrained=True)

它给了我以下错误:

我认为这是因为example格式错误,但是我怎样才能得到正确的格式呢?

根据下面的评论,我的新代码是:

我现在得到错误:

0 投票
2 回答
2078 浏览

c++ - 在 C++ API 中将一个张量的一部分复制到另一个张量中

我需要将一个张量 (in ) 的一行复制c++ API到另一个张量的某个部分,其中 begin 和 end 索引可用。在 C++ 中,我们可以使用类似的东西:

myintsinto复制三个值myvector,从第四个索引开始。libtorch我想知道(即C++)中是否有类似的API ?

0 投票
0 回答
421 浏览

pytorch - LibTorch,使用 deeplab 模型在转发时出现段错误

我正在尝试通过 Libtorch 中的 DeepLab 模型运行图像来分割它们。使用 pytorch,我正在像这样转换 Deeplabv3 模型:

现在,在带有 LibTorch 的 c++ 中,我正在尝试加载模型并通过它运行数据。然而,这失败了:

我在哪里错了?