2017-01-23 5 views
0

Ниже мой кодпопытки вызвать метод «случайное» (нилъ значения) в Lua

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 

Я бег выше, используя следующую команду

CUDA_CARD_NR=1 luajit feedforwad.lua 

Это дает следующее сообщение об ошибке

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

Я знаю, что есть ошибка в строке

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

Но я не могу понять.

+0

См http://lua-users.org/wiki/MathLibraryTutorial - может отсутствовать имя библиотеки? – user2864740

ответ

0

LuaJIT: feedforwad.lua: 13: попытка назвать «случайный» (нулевую значение) Метод

не «какая-то ошибка», и вы не должны иметь проблем, чтобы выяснить, что это неправильно, потому что сообщение об ошибке сообщает вам, что именно не так.

Вы пытались вызвать метод с именем random, который является значением nil. Это означает, что с этим именем нет функции, и поэтому вы не можете ее назвать.

Согласно справочной документации (которую вы должны были проверены Befor сюда) функция на самом деле называется rand

+0

Спасибо за ваш ответ. На самом деле, я хочу тензор cuda со случайными значениями 1 и 0. Я также пробовал 'torch.CudaTensor(): rand()' он также не работает. Можете ли вы сказать, что это правильный способ сделать это? – tourism

+1

, так что вы получаете ту же ошибку или что? не работает, не очень информативно. – Piglet

+0

На самом деле это не удовлетворяет мою потребность. Я хочу, чтобы двоичная цифра 0 или 1 в случайном числе, которая не генерируется 'torch.CudaTensor(): rand()'. – tourism