如何解决读取 .txt 文件更高效的内存 C++
我正在用 C++ 开发一个神经网络,并希望它在 MNIST 训练集上进行训练。包含所有输入和所需输出的 .txt 文件大小为 301819KB。我目前正在尝试用线条阅读它们
.npmrc
但是当我使用编译它
vector<vector<float> > inp;
vector<int> out;
vector<float> row;
float buf;
int bufl;
for (int outer = 0; outer < 60000; ++outer) {
for (int reader = 0; reader < 784; ++reader) {
cin >> buf;
row.push_back(buf);
}
inp.push_back(row);
}
for (int label = 0; label < 60000; ++label) {
cin >> bufl;
out.push_back(bufl);
}
然后使用
运行它g++ -o nn main.cpp
几秒钟后出现错误,提示:内存不足。有没有办法让我将 .txt 文件读取到向量的内存效率更高,或者以某种方式允许程序访问更多内存?该程序仅使用大约 1.2GB 的内存(我认为仅读取 300MB 的输入文件的内存效率仍然很低)所以我仍然有足够的内存可以使用(我有 16GB)
解决方法
正如评论所说,row
永远不会被清除,因此它会永远增长。这是对向量进行了一些优化的固定版本:
vector<vector<float> > inp;
vector<int> out;
vector<float> row;
// reserve known sizes
constexpr size_t kNumSamples = 60000;
constexpr size_t kRowLength = 784;
inp.reserve(kNumSamples);
row.reserve(kRowLength);
out.reserve(kNumSamples);
float buf;
int bufl;
for (int outer = 0; outer < kNumSamples; ++outer) {
for (int reader = 0; reader < kRowLength; ++reader) {
cin >> buf;
row.push_back(buf);
}
// move the row into the input vector,this will also reset the row
inp.push_back(std::move(row));
}
for (int label = 0; label < kNumSamples; ++label) {
cin >> bufl;
out.push_back(bufl);
}
您还可以进行其他更改(例如在使用它们的范围内声明变量),但为了尽可能地匹配输入代码,我将它们排除在外。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。