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 [ ]: