- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下循环:
for (int i = 1; i <= epochs; ++i) {
for (std::vector<std::filesystem::path>::iterator it = batchFiles.begin(); it != batchFiles.end(); ++it) {
struct fann_train_data *data = fann_read_train_from_file(it->string().c_str());
fann_shuffle_train_data(data);
float error = fann_train_epoch(ann, data);
}
}
ann
是网络。
batchFiles
是 std::vector<std::filesystem::path>
.
此代码遍历文件夹中的所有训练数据文件,每次都使用它来训练 ANN,次数由 epochs
确定变量。
以下行会导致内存泄漏:
struct fann_train_data *data =
fann_read_train_from_file(it->string().c_str());
问题是我必须不断地在训练文件之间切换,因为我没有足够的内存来一次加载它们,否则我只会加载一次训练数据。
为什么会这样?我该如何解决这个问题?
最佳答案
在 C++ 中,当管理它的对象超出范围时,内存会自动释放。 (假设类(class)编写正确。)这叫做 RAII .
但 FANN 提供的是 C API,而不是 C++ API。在 C 中,您需要在用完内存后手动释放内存。推而广之,当 C 库为您创建一个对象时,它通常需要您在使用完该对象时告诉它。库没有很好的方法来自行确定何时应该释放对象的资源。
惯例是,每当 C API 为您提供类似 struct foo* create_foo()
的函数时,您应该寻找相应的函数,例如 void free_foo(struct foo* f)
。它是对称的。
在您的情况下,正如 PaulMcKenzie 最初指出的那样,您需要 void fann_destroy_train_data(struct fann_train_data * train_data)
。来自 the documentation ,强调我的:
Destructs the training data and properly deallocates all of the associated data. Be sure to call this function after finished using the training data.
关于c++ - FANN:使用从多个文件读取的数据训练 ANN 时发生内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54975525/
在 FANN 中,导入训练数据后,我会根据我正在使用的激活函数对其进行缩放。我使用 FANN_SIGMOID_SYMMETRIC,所以它应该是 -1.0 和 1.0。 我的训练数据范围是[-100,1
使用 FANN图书馆我得到了不可预测的结果。训练文件: 132 600 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0
我编译了一个简单的程序: #include #include #include int main(int argc, char* argv[]) { struct fann *ann =
我正在使用带有给定代码的 FANN 库。 #include #include "doublefann.h" int main() { const NUM_ITERATIONS = 10000
我正在尝试使用 MinGW 在 Windows 上构建一个基本的 FANN(快速人工神经网络)项目。然而,每当我尝试链接可执行文件时,我都会遇到一堆 undefined reference 错误。有趣
我正在尝试 FANN PHP 模块,并且能够成功运行此处的示例 http://php.net/manual/en/fann.examples-1.php 我将其修改为能够处理 5 个输入,并使用任意函
我正在使用 FANN 库构建神经网络来处理回归问题。问题是,一旦网络在相关训练集上接受了训练(这似乎工作得很好),每个单独的测试输出完全相同的输出。换句话说,给定我的 16 个预测变量的任何状态,根据
我正在开发一款使用 FANN(快速人工神经网络库)的软件。在多次尝试编写自己的 ANN 代码以编译 FANN 示例程序(这里是 C++ XOR 近似程序)的尝试失败后,我尝试过。这是来源。 #incl
我尝试在 FANN 库的帮助下编写简单的垃圾邮件分类器。为此,我收集了一些垃圾邮件和非垃圾邮件,并收集了一本最常用的英语单词词典。我使用以下代码创建了一个具有一个隐藏层的神经网络: num_input
我想通过将配置保存到数据库中来使用 FANN,然后在运行期间加载它。所有功能似乎都在将网络保存/加载到配置文件中。但是我的应用程序不能有临时文件。 如何将训练保存到字符串中/从字符串加载网络?我正在使
我一直在试验 FANN库,它似乎是一个很棒的神经网络库,但我在如何使用它方面遇到了一些问题。 所以我在这里尝试做的是训练一个神经网络,为了弄乱库,给它一个输入并期望一个输出。 FANN::neural
使用 FANN 我无法成功运行从 FANN 网站复制粘贴的代码。我在 Windows 7 和 MS Visual Studio 2008 上使用 FANN 2.2.0 版。我的 XOR 示例训练程序代
我在快速人工神经网络文档中发现种子函数是 fann_seed_rand() 但我不明白它是如何工作的。调用或不调用似乎都是一样的。 如何修复种子?主要目标是让 fann_shuffle_data()
我正在使用 FANN 来使用神经网络。 (Link to FANN) 我需要在训练网络后获得权重矩阵,但我没有从文档中找到任何内容。 (Link to documentation) 你知道如何得到这个
我有以下循环: for (int i = 1; i ::iterator it = batchFiles.begin(); it != batchFiles.end(); ++it) {
在这里,我阅读了有关 C/C++ 人工神经网络中 FANN 的很好的引用资料。实际上我正在使用 C++(在带有 g++ v4.6.1 的 Ubuntu 上)。用 C 编写的库具有 C++ 的包装器。但
我有一个标准的神经网络,我已经训练了一段时间,但直到完善为止。培训类(class)完成后,我将网络保存在磁盘上。 一段时间后,我想从它离开的地方恢复训练网络。问题是,似乎每次我开始新的训练类(clas
我刚刚构建并安装了 libfann以及相关的 python 绑定(bind)。 python 设置似乎运行正常: $ sudo python setup.py install Running SWIG
我已经尝试使用所有 apt-get 安装、pip 和直接从源代码在 Ubuntu 上安装 FANN Python 绑定(bind),但是当我尝试导入 FANN 时,同样的错误不断发生。即,它告诉我fa
我是一名优秀的程序员,十分优秀!