Bienvenu, visiteur! [ Se connecter ] 

 

Réseau de neurones à 5 couches sans TensorFlow

  • Répertoriée 21 mars 2024 21 h 00 min
  • Expires: Cette annonce a expiré

Description

Réseau de neurones à 5 couches sans TensorFlow

Python
import numpy as np

class NeuralNetwork:

    def __init__(self, n_inputs, n_hidden_1, n_hidden_2, n_hidden_3, n_hidden_4, n_outputs):
        # Initialisation des poids et biais
        self.w1 = np.random.randn(n_inputs, n_hidden_1)
        self.b1 = np.zeros((n_hidden_1,))
        self.w2 = np.random.randn(n_hidden_1, n_hidden_2)
        self.b2 = np.zeros((n_hidden_2,))
        self.w3 = np.random.randn(n_hidden_2, n_hidden_3)
        self.b3 = np.zeros((n_hidden_3,))
        self.w4 = np.random.randn(n_hidden_3, n_hidden_4)
        self.b4 = np.zeros((n_hidden_4,))
        self.w5 = np.random.randn(n_hidden_4, n_outputs)
        self.b5 = np.zeros((n_outputs,))

    def forward(self, X):
        # Propagation avant
        z1 = X.dot(self.w1) + self.b1
        a1 = np.tanh(z1)
        z2 = a1.dot(self.w2) + self.b2
        a2 = np.tanh(z2)
        z3 = a2.dot(self.w3) + self.b3
        a3 = np.tanh(z3)
        z4 = a3.dot(self.w4) + self.b4
        a4 = np.tanh(z4)
        z5 = a4.dot(self.w5) + self.b5
        a5 = sigmoid(z5)
        return a5

    def backward(self, X, y, a5):
        # Propagation arrière
        d5 = a5 - y
        z4 = a3.dot(self.w4) + self.b4
        d4 = (d5.dot(self.w5.T)) * (1 - a4**2)
        z3 = a2.dot(self.w3) + self.b3
        d3 = (d4.dot(self.w4.T)) * (1 - a3**2)
        z2 = a1.dot(self.w2) + self.b2
        d2 = (d3.dot(self.w3.T)) * (1 - a2**2)
        z1 = X.dot(self.w1) + self.b1
        d1 = (d2.dot(self.w2.T)) * (1 - a1**2)

        # Mise à jour des poids et biais
        self.w5 -= self.learning_rate * a4.T.dot(d5)
        self.b5 -= self.learning_rate * d5
        self.w4 -= self.learning_rate * a3.T.dot(d4)
        self.b4 -= self.learning_rate * d4
        self.w3 -= self.learning_rate * a2.T.dot(d3)
        self.b3 -= self.learning_rate * d3
        self.w2 -= self.learning_rate * a1.T.dot(d2)
        self.b2 -= self.learning_rate * d2
        self.w1 -= self.learning_rate * X.T.dot(d1)
        self.b1 -= self.learning_rate * d1

    def train(self, X, y, epochs, learning_rate):
        # Entraînement du réseau
        for epoch in range(epochs):
            a5 = self.forward(X)
            self.backward(X, y, a5)

    def predict(self, X):
        # Prédiction
        a5 = self.forward(X)
        return np.argmax(a5, axis=1)

# Fonction d'activation sigmoïde
def sigmoid(x):
    return 1 / (1 + np.exp(-x))

# Exemple d'utilisation
n_inputs = 784 # 28x28 images
n_hidden_1

1226 vues au total, 1 aujourd'hui

  

Identifiant de l'annonce : 77265fc9f0e08989

Signaler un problème

Processing your request, Please wait....

Sponsored Links

↑