In [1]:
import numpy as np
Un neurone formel¶
In [9]:
def neuron(x, w, b, f):
z = np.dot(x, w) + b
y = f(z)
return y
x = np.array([1, 2, 3])
w = np.array([1, 1, 1])
b = np.array([1])
neuron(x, w, b, lambda x : x)
Out[9]:
array([7])
Opérateurs logiques¶
In [14]:
def _or(x1, x2):
x = np.array([x1, x2])
w = np.array([1, 1])
b = np.array([-1/2])
return neuron(x, w, b, lambda z : 1 if z >= 0 else 0)
[[x1, x2, _or(x1, x2)] for x1 in [0, 1] for x2 in [0, 1]]
Out[14]:
[[0, 0, 0], [0, 1, 1], [1, 0, 1], [1, 1, 1]]
In [16]:
def _and(x1, x2):
x = np.array([x1, x2])
w = np.array([1, 1])
b = np.array([-2])
return neuron(x, w, b, lambda z : 1 if z >= 0 else 0)
[[x1, x2, _and(x1, x2)] for x1 in [0, 1] for x2 in [0, 1]]
Out[16]:
[[0, 0, 0], [0, 1, 0], [1, 0, 0], [1, 1, 1]]
Un réseau de neurones¶
Un réseau à une couche¶
In [26]:
def _net(x, w, b, f):
z = np.matmul(x, w) + b
y = f(z)
return y
x = np.array([1, 2])
w = np.array([[1, 1],
[1, 1]])
b = np.array([[1],
[1]])
_net(x, w, b, lambda z : 1. / (1 + np.exp(-z)))
Out[26]:
array([[0.98201379, 0.98201379], [0.98201379, 0.98201379]])
Un réseau à plusieurs couches¶
In [30]:
def net(x, layers):
y = x
for w, b, f in layers:
y = _net(y, w, b, f)
print(y)
return y
def sigmoid(z):
return 1. / (1 + np.exp(-z))
layers = [(np.array([[1, 1], [1, 1]]),np.array([1, 1]), sigmoid),
(np.array([[1, 1], [1, 1]]),np.array([1, 1]), sigmoid),
(np.array([[1, 1], [1, 1]]),np.array([1, 1]), sigmoid)]
x = np.array([1, 2])
net(x, layers)
[0.98201379 0.98201379] [0.9509223 0.9509223] [0.94793755 0.94793755]
Out[30]:
array([0.94793755, 0.94793755])
In [34]:
layers = [(np.array([[1, -1], [-2, 1]]),np.array([1, 0]), sigmoid),
(np.array([[2, -2], [-1, -1]]),np.array([0, 0]), sigmoid),
(np.array([[3, -1], [-1, 4]]),np.array([-2, 2]), sigmoid)]
x = np.array([0, 0])
net(x, layers)
[0.73105858 0.5 ] [0.72354549 0.12323811] [0.51184738 0.8543839 ]
Out[34]:
array([0.51184738, 0.8543839 ])
In [ ]: