2017-03-03 130 views
0

我嘗試在Python從這個tutorial重寫代碼朱莉婭並得到意想不到的結果簡單的神經網絡 - [0.5; 0.5; 0.5; 0.5]我看行連連,但看不出差別。在朱莉婭

Python代碼:

from numpy import exp, array, random, dot 
training_set_inputs = array([[0, 0, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]]) 
training_set_outputs = array([[0, 1, 1, 0]]).T 
random.seed(1) 
synaptic_weights = 2 * random.random((3, 1)) - 1 
for iteration in xrange(10000): 
    output = 1/(1 + exp(-(dot(training_set_inputs, synaptic_weights)))) 
    synaptic_weights += dot(training_set_inputs.T, (training_set_outputs - output) * output * (1 - output)) 
print 1/(1 + exp(-(dot(array([1, 0, 0]), synaptic_weights)))) 

我朱莉婭代碼:

function activate(x) 
    return 1./(1+exp(-x)) 
end 

function g_activate(x) 
    return x.*(1-x) 
end 

function test(iter) 

Input = [0 0 1;0 1 1;1 0 1;1 1 1] 
TInput = transpose(Input) 
Test = [0, 1, 1, 0] 
Weights = 2 * rand(3, 1) - 1 

for i in 1:iter 

output = activate(Input*Weights) 
error = Test - output 
delta = error.*g_activate(output) 
Weights += TInput*delta 

end 

println(activate(Input*Weights)) 
end 

什麼我做錯了,如何做到這一點的朱莉婭

更地道的方式
+0

@khelwood,是的。它是矩陣的轉置。 – CamFerry

+0

這很有道理。 – khelwood

+0

我編輯與另一種語法。 – CamFerry

回答

4

您正在使用錯誤的輸入數據朱莉婭代碼。爲了配合Python的例子

Input = [0 0 1;0 1 1;1 0 1;1 1 1] 

應該

Input = [0 0 1;1 1 1;1 0 1;0 1 1] 

這就是我與校正輸入獲得:

julia> test(10000) 
[0.00966854; 0.992117; 0.993589; 0.00786553] 

而且如果我有training_set_inputs = array([[0, 0, 1], [0, 1, 1], [1, 0, 1], [1, 1, 1]])運行Python代碼我m到處[ 0.5]

+0

謝謝。我必須更注重細節。 – CamFerry