2017-01-23 3 views
0

Unten ist mein CodeVersuch zu nennen Methode ‚zufällig‘ (ein Null-Wert) in 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 

ich oben mit dem folgenden Befehl

CUDA_CARD_NR=1 luajit feedforwad.lua 

Es gibt die folgenden Fehler

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

Ich weiß, dass es einen Fehler in der Zeile

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

Aber ich bin nicht in der Lage, herauszufinden.

+0

http://lua-users.org/wiki/MathLibraryTutorial sehen (die Sie vor dem kommenden hier eingecheckt haben sollten) - könnte einen Bibliotheksnamen fehlt? – user2864740

Antwort

0

luajit: feedforwad.lua: 13: Versuch ‚random‘ Methode aufrufen (eine Null Wert)

Ist das nicht „einige Fehler“ und Sie sollten keine Probleme herausfinden müssen, was falsch ist, weil Die Fehlermeldung sagt Ihnen genau, was falsch ist.

Sie haben versucht, die eine Methode random, die ein nil Wert sein geschieht Namen zu nennen. Dies bedeutet, dass es keine Funktion mit diesem Namen gibt und Sie ihn daher nicht anrufen können.

Nach der Referenzdokumentation der Funktion tatsächlich rand

gestattet
+0

Danke für Ihre Antwort. Eigentlich möchte ich einen Cuda Tensor mit zufälligen Werten von 1 und 0. Ich habe auch 'fackel.CudaTensor(): rand()' es funktioniert auch nicht. Kannst du mir sagen, wie es richtig ist? – tourism

+1

so erhalten Sie den gleichen Fehler oder was? funktioniert nicht, ist nicht sehr informativ. – Piglet

+0

Eigentlich erfüllt es meine Bedürfnisse nicht. Ich möchte Binärziffer 0 oder 1 in einer Zufallszahl, die nicht von 'fackel.CudaTensor(): rand()' erzeugt wird. – tourism

Verwandte Themen