【问题标题】:Check failed: GetOpGradFactory()->insert({op, func}).second Duplicated gradient for MapAccumulate检查失败:GetOpGradFactory()->insert({op, func}).second MapAccumulate 的重复梯度
【发布时间】:2018-11-23 09:07:35
【问题描述】:

注意: 我也在这里https://openmodelica.org/forum/default-topic/2570-linux-mint,-python-3-6-omc-server-is-down-please-start-it 发布了这个问题,我希望也能接触到更多具有 TensorFlow 经验的群体。


我想在 Modelica 模型中使用 Tensorflow C++ API

为此,我在 C++ 中创建了一个封装了 Tensorflow 细节的类。 此外,同一个文件包含 3 个函数(调用构造函数、析构函数和一个使用我的类的现有实例的函数。这些函数在各自的头文件中声明为“extern”(仅当由 C++ 编译器读取时,我是使用 __cplusplus 来区分)。

然后我使用 g++ 将所述文件(类和 3 个函数)编译为 .so(我确实使用了 -fPIC 和 -shared)。在 /usr/lib 中,我创建了一个指向所述共享对象库的符号链接。

(为了完整起见,我应该提到我在使用“LibraryDirectory”和“IncludeDirectory”注释时遇到了问题。这就是为什么我创建符号链接到我将使用 -L 传递给 g++/gcc 的所有目录的内容和 -我(对于我的测试程序)直接进入 Model/Resources/Library 和 Model/Resources/Include 目录。由于没有更多的编译错误,我认为这没关系。)

现在奇怪的是:

我可以在用 gcc 编译的测试程序中使用这 3 个函数。我将它与所有 Tensorflow 库(以及上面的 libm、libstdc++ 和我的 .so)链接起来,它按预期工作。 但是,当我尝试在 a) Modelica 类(构造函数和析构函数)和 b) 使用“外部”函数调用的函数中使用这 3 个函数时,它可以正常编译,但会出现运行时错误:


标准输出 | OMEditInfo |

/tmp/OpenModelica_fred/OMEdit/TestCpp -port=44382 -logFormat=xmltcp -override=startTime=0,stopTime=1,stepSize=0.002,tolerance=1e-6,solver=dassl,outputFormat=mat,variableFilter= .* -r=TestCpp_res.mat -w -lv=LOG_STATS

标准输出 |错误 |

2018-11-22 10:47:00.153977: F tensorflow/core/framework/function.cc:1440] 检查失败:GetOpGradFactory()->insert({op, func}).second MapAccumulate 的重复梯度

标准输出 |错误 |

进程崩溃

标准输出 |错误 |

进程崩溃
模拟过程失败。以代码 6 退出。


这怎么可能?我无法在我的测试程序中使用导致相同错误的 3 个函数执行任何操作。如果我不在我的测试程序中,OMC 生成的可执行文件会对它们做什么?

【问题讨论】:

    标签: c++ tensorflow modelica openmodelica


    【解决方案1】:

    我找到了一个解决方案,将 /usr/bin 中的符号链接“clang”指向“gcc”。

    有关说明,请查看https://openmodelica.org/forum/default-topic/2570-linux-mint,-python-3-6-omc-server-is-down-please-start-it

    【讨论】:

      猜你喜欢
      • 2012-08-01
      • 2023-04-01
      • 1970-01-01
      • 2020-10-01
      • 2011-09-27
      • 1970-01-01
      • 2013-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多