我使用ZeroBrane Studio作为IDE来编写深度学习代码。我已经意识到在IDE中编程时使用的模型(使用Lua 5.1作为解释器)在从Torch7执行相同的加载时不能很好地加载。从火炬(./th code.lua)学习然后尝试在IDE中加载它们时也会发生同样的情况。我得到类似的东西:
/opt/zbstudio/bin/linux/x64/lua: /home/dg/torch/install/share/lua/5.1/torch/File.lua:294: unknown object
有人知道如何查看火炬正在使用的lua版本吗?关于如何解决这个问题的任何想法?
谢谢!
更新:我确实在Torch和ZeroBrane中使用了相同的Lua版本(5.1)。当我通过torch.load()时,我仍然会得到不同的行为(一个成功,另一个崩溃)。
答案 0 :(得分:1)
要检查正在运行的Lua版本,通常会打印_VERSION。它是一个存储Lua版本的全局变量(当然,除非你覆盖它)。
print(_VERSION)
如果由于某种原因这不可用,他们可能会在他们的网站上说明他们的版本(?)
答案 1 :(得分:0)
Linux上的大多数命令行工具都了解-v
命令行开关(“版本”)。 Lua和LuaJIT也是如此。
要确定哪个解释器正在运行特定脚本,您可以在arg
表中扫描最小(通常是负数)索引:
local exe, i = arg[ 0 ], -1
while arg[ i ] do
exe, i = arg[ i ], i-1
end
print( exe )
或者(在Linux上)您可以在脚本运行时查看/proc
文件系统:
ls -l /proc/4425/exe
(用实际进程ID替换4425
)。
根据错误消息判断ZeroBrane Studio中使用的解释器在您的情况下似乎是/opt/zbstudio/bin/linux/x64/lua
。
答案 2 :(得分:0)
@siffiejoe:感谢您提出有关版本的问题,它给了我正确的探索方向。
public class MyTest {
private final PrintStream outDefault = System.out;
private final PrintStream errDefault = System.err;
private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
private final ByteArrayOutputStream errContent = new ByteArrayOutputStream();
@Before
public void setUp() {
System.setOut(new PrintStream(outContent));
System.setErr(new PrintStream(errContent));
}
@After
public void tearDown() {
System.setOut(outDefault);
System.setErr(errDefault);
}
@Test
public void Test1_Condition_Expected() {
assertTrue(errContent.toString().toLowerCase().contains("..."));
}
...
@Test
public void TestN_Condition_Expected() {
assertTrue(errContent.toString().toLowerCase().contains("..."));
}
}
因此在意识到终端“th”正在使用LuaJit 2.1.0后,我所要做的就是在ZeroBrane中创建一个user.lua并添加“path.lua =”〜/ torch / install / bin / luajit“现在,ZB正在使用与此相同的luajit解释器。
感谢大家的建议。