<PLEASE USE THE FOLLOWING TEMPLATE TO HELP YOU CREATE A GREAT POST!>

<Below this line, add a link to the EXACT exercise that you are stuck at.>

<In what way does your code behave incorrectly? Include ALL error messages.>

My code gives this error:

TypeError: unsupported operand type(s) for *: ‘NoneType’ and ‘float’

<What do you expect to happen instead?>

it is expected to print output after training

import numpy as np

‘’’

below this sigmoid function runs in every single neuron,

the sigmoid turns the numbers to probabilities

‘’’

def nonlin(x, deriv=False):

if (deriv == True):

return (x * (1 - x))

```
return 1 / (1 + np.exp(-x))
# when you pass in true, the drivative would be calculated,
# input data
```

x = np.array([[0, 0, 1],

[0, 0, 1],

[1, 0, 1],

[1, 1, 1]])

# output data

y = np.array([[0],

[1],

[1],

[0]])

# seed

np.random.seed(1)

# synapses

# 1 is the bias

# syn0 is a 3 by 4 matrix

# syn2 is a 4 by 1 matrix

syn0 = 2 * np.random.random((3, 4)) - 1

syn1 = 2 * np.random.random((4, 1)) - 1

# training

for j in range(60000):

```
# layers
l0 = x
l1 = nonlin(np.dot(l0, syn0))
l2 = nonlin(np.dot(l1, syn1))
# backpropagation
l2_error = y - l2
if j % 10000 == 0:
print("Error:{0}".format(str(np.mean(np.abs(l2_error)))))
# calculating deltas
l2_delta = l2_error * nonlin(l2, deriv=True)
l1_error = l2_delta.dot(syn1.T)
l1_delta = l1_error * nonlin(l1, deriv=True)
# update synapses
syn1 += l1.T.dot(l2_delta)
syn0 += l0.T.dot(L1_delta)
```

print(‘output after training’)

`<do not remove the three backticks above>`