简体   繁体   中英

attempt to call method 'random' (a nil value) in Lua

Below is my code

require 'dpnn'
 require 'cunn'

 local deviceNumber = tonumber(os.getenv("CUDA_CARD_NR"))
 cutorch.setDevice(deviceNumber)

 local module = nn.Sequential():cuda()
 module:add(nn.Linear(2,1):cuda())
 module:add(nn.Sigmoid():cuda())

 criterion = nn.BCECriterion():cuda() -- Binary Cross Entorpy Criteria

 local targets = torch.CudaTensor(10):random(0,1)
 local inputs = torch.CudaTensor(10,2):uniform(-1,1)

 function trainEpoch(module,criterion,inputs,targets)
   for i=1,inputs:size(1) do
     local idx = math.random(1,inputs:size(1))
     local input, target = inputs[idx], targets:narrow(1,idx,1)
     -- forward
     local output= module:forward(input)
     local loss= criterion:forward(output,target)
     -- backward
     local gradOutput = criterion:backward(output,target)
     module:zeroGradParameters()
     local gradInput = module:backward(input,gradOutput)
     --update
     module:updateGradParameters(0.9) -- momentum
     module:updateParameters(0.1) -- W = W -0.1*dL/dW
   end
 end

 for i=1,100 do
   trainEpoch(module,criterion,inputs,targets)
 end

I am running above using the following command

CUDA_CARD_NR=1 luajit feedforwad.lua 

It gives the following error

luajit: feedforwad.lua:13: attempt to call method 'random' (a nil value)
stack traceback:
    feedforwad.lua:13: in main chunk
    [C]: at 0x004064f0

I know that there is some error in the line

local targets = torch.CudaTensor(10):random(0,1)

But I am not able to figure out.

luajit: feedforwad.lua:13: attempt to call method 'random' (a nil value)

Is not "some error" and you should not have problems to figure out what is wrong because the error message tells you exactly what is wrong.

You tried to call the a method named random which happens to be a nil value. This means that there is no function with that name and therefor you can't call it.

According to the reference documentation (which you should have checked befor coming here) the function is actually named rand

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM