【发布时间】:2019-07-25 07:26:25
【问题描述】:
我有以下循环:
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());
问题是我必须经常在训练文件之间切换,因为我没有足够的内存来一次加载它们,否则我只会加载一次训练数据。
为什么会这样?我该如何解决这个问题?
【问题讨论】:
-
我不熟悉 ANN,但 documentation here 建议应该在每次迭代时调用
fann_destroy_train。 -
谢谢。我不知道数据有自己的破坏功能,因为
fann_destroy不接受训练数据。
标签: c++ memory-leaks neural-network fann