运行Google的Deep Q网络代码时遇到的问题

时间:2015-04-10 14:44:48

标签: lua machine-learning deep-learning torch

Google的Atari Games深度Q网络就在这里。

https://github.com/rahular/deepmind-dqn

使用GPU设置运行时

./run_gpu <game name>

我有这个错误

../torch/bin/luajit: ./convnet.lua:22: attempt to call local 'convLayer' (a nil value)
stack traceback:
    ./convnet.lua:22: in function 'network'
    ./NeuralQLearner.lua:89: in function '__init'
    ...einforcement_Learning/torch/share/lua/5.1/torch/init.lua:51: in function <...einforcement_Learning/torch/share/lua/5.1/torch/init.lua:47>
    [C]: at 0x7f419423d380
    ./initenv.lua:133: in function 'setup'
    train_agent.lua:52: in main chunk
    [C]: at 0x00406230

导致此问题的代码位于此文件https://github.com/rahular/deepmind-dqn/blob/master/dqn/convnet.lua

并且它在这个函数中

function create_network(args)

    local net = nn.Sequential()
    net:add(nn.Reshape(unpack(args.input_dims)))

    --- first convolutional layer
    local convLayer = nn.SpatialConvolution

    if args.gpu >= 0 then
        net:add(nn.Transpose({1,2},{2,3},{3,4}))
        convLayer = nn.SpatialConvolutionCUDA
    end

    net:add(convLayer(args.hist_len*args.ncols, args.n_units[1],
                        args.filter_size[1], args.filter_size[1],
                        args.filter_stride[1], args.filter_stride[1],1))
    net:add(args.nl())

net:add(convLayer(第22行。

我使用gpu设置似乎

convLayer =  nn.SpatialConvolutionCUDA

导致convLayer为零。

有谁知道为什么nn.SpatialConvolutionCUDA返回nil?

2 个答案:

答案 0 :(得分:3)

代码最初是否支持GPU,或者您是自己添加的?

您应该替换depreceated层,即替换:

net:add(nn.Transpose({1,2},{2,3},{3,4}))
convLayer = nn.SpatialConvolutionCUDA

convLayer = nn.SpatialConvolution

检查图层的文档。

编辑:使用this branch,我修复了它以获得GPU支持。

答案 1 :(得分:1)

找到了解决方案。

使用这个github分支

https://github.com/soumith/deepmind-atari

克隆此分支后,使用luarocks安装cutorch和cunn。

现在您可以运行代码了。