Where is my mistake in converting this python code into Julia

I’m trying to convert the python code(left) into Julia (right), python code is working fine, but Julia code gave an error at the highlighted line `l1_delta = ...`:

``````DimensionMismatch("A has dimensions (4,1) but B has dimensions (4,1)")
``````

Julia full code is here:

``````# sigmoid function
sigmoid(x::Real, derive::Bool=false) =
(derive==true) ? x*(one(x)-x) : one(x)/(one(x) + exp(-x))

x = [0 0 1; 0 1 1; 1 0 1; 1 1 1]

y = [0 0 1 1]'

syn0 = 2 * rand(3,1)

for iter in (:)(1,10000)
l0 = x
l1 = sigmoid.(l0 * syn0)
l1_error = y - l1
l1_delta = l1_error * sigmoid.(l1,true) # here I get the error
syn0 += l0' * l1_delta
end

println("Output After Training:")
l1
``````

syn0 = 2 * rand(3,1) - 1?

Thanks for your feedback, the error is in

``````l1_delta = l1_error * sigmoid.(l1,true)
``````

Regarding your comment, see the below

You are missing a point in the subtraction:

`syn0 = 2 * rand(3,1) .- 1`

Thanks, but I still getting error at:

``````l1_delta = l1_error * sigmoid.(l1,true)
``````

Now that I noticed the comment of the error.
`l1_delta = l1_error .* sigmoid.(l1,true) # here I get the error`

1 Like

The problem, in my opinion, is that you are doing a matrix multiplication, and in that case, both matrixes cannot have the same dimension.

Or you use the transpose of one of them or you use

``````l1_delta = l1_error .* sigmoid.(l1,true) # Multiply element by element
``````
1 Like

Thanks,
So the python code:

``````l1_delta = l1_error * sigmoid(l1,True)
``````

Is not a matrix multiplication, and different from the python code using `np` which is generating the same error got by Julia:

``````l1_delta = np.dot(l1_error,sigmoid(l1,True))
``````

Now the code is correct, thanks

Transpose can not work here as it will generate array in different dimensions, but the `.*` worked fine, thanks