次のループがあります。
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>
。
このコードは、フォルダー内のすべてのトレーニング データ ファイルを反復処理し、それを使用して毎回、epochs
変数によって決定される回数だけ ANN をトレーニングします。
次の行により、メモリ リークが発生します。
struct fann_train_data *data = fann_read_train_from_file(it->string().c_str());
問題は、一度にすべてをロードするのに十分なメモリがないため、トレーニング ファイルを常に切り替える必要があることです。そうしないと、トレーニング データを 1 回だけロードしたことになります。
なぜこれが起こるのですか?どうすればこれを解決できますか?