Google用于Atari游戏的深度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为nil。
有谁知道为什么nn.SpatialConvolutionCUDA返回nil吗?
回答:
这个代码最初是支持GPU的,还是你自己添加的GPU支持?
你应该替换那些已废弃的层,即替换:
net:add(nn.Transpose({1,2},{2,3},{3,4}))convLayer = nn.SpatialConvolutionCUDA
为
convLayer = nn.SpatialConvolution
查看层的文档。
编辑:使用这个分支,我已经修复了GPU支持的问题。