【发布时间】:2016-10-03 12:34:22
【问题描述】:
我是 Lua 的新手(用于 Torch7 框架)。我有一个大小约为 1.4GB 的输入功能文件(文本文件)。简单的 io.open 函数在尝试打开此文件时会引发错误“内存不足”。在浏览用户组和文档时,我发现它可能是 Lua 限制。有解决方法吗?还是我在读取文件时做错了什么?
local function parse_file(path)
-- read file
local file = assert(io.open(path,"r"))
local content = file:read("*all")
file:close()
-- split on start/end tags.
local sections = string.split(content, start_tag)
for j=1,#sections do
sections[j] = string.split(sections[j],'\n')
-- remove the end_tag
table.remove(sections[j], #sections[j])
end
return sections
end
local train_data = parse_file(file_loc .. '/' .. train_file)
编辑:我试图读取的输入文件包含我想训练我的模型的图像特征。这个文件是有序的({start-tag} ...contents...{end-tag}{start-tag} ...等等...),所以如果我可以加载这些就可以了部分(开始标签到结束标签)一次一个。但是,我希望所有这些部分都加载到内存中。
【问题讨论】:
-
您确定在
io.open之后弹出“内存不足”吗?这似乎不对。但是,您可以分块读取文件吗?你真的需要内存中的hole文件吗注意file:read("*all")中的*在lua 5.3中已经过时了(我不知道torch使用哪个版本) -
Torch 使用有内存限制的 LuaJIT。参见例如stackoverflow.com/questions/35155444/….
-
@pschulz : 在执行
local content = file:read("*all")时弹出内存不足错误。 -
好吧,这似乎是合理的。请把这件事弄清楚。我当然知道你的意思是在调用 io 时。 阅读,但你永远不知道。但同样,您真的必须一次读取整个文件吗?
-
@pschulz :对于不清楚的问题,我深表歉意。在完成这项任务本身时,我正在深入了解 Lua。我试图读取的输入文件包含我想训练我的模型的图像特征。这个文件是有序的(
...contents... ...等等...),所以如果我可以加载这些就可以了一节一节。但是,我希望所有这些部分都加载到内存中。这会让事情变得更清楚吗?我正在相应地编辑问题。谢谢:)