0% ont trouvé ce document utile (0 vote)
108 vues4 pages

TP: Tensorflow Federated: Exercice 1

Ce document présente un exercice sur l'apprentissage fédéré utilisant TensorFlow Federated, où un modèle de réseau de neurones prédit si une entrée est supérieure à 0.5. Les données restent privées pour chaque client, et les mises à jour des poids sont agrégées par le serveur central via l'algorithme Federated Averaging. L'objectif est de minimiser la perte et maximiser la précision du modèle global sur plusieurs rounds, avec des résultats à comparer à un modèle centralisé.

Transféré par

Icherak Bn
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Thèmes abordés

  • TensorFlow,
  • perte globale,
  • fonction d'assignation,
  • clients,
  • exactitude binaire,
  • modèle TFF,
  • optimiseur serveur,
  • assignation des poids,
  • initialisation,
  • précision du modèle
0% ont trouvé ce document utile (0 vote)
108 vues4 pages

TP: Tensorflow Federated: Exercice 1

Ce document présente un exercice sur l'apprentissage fédéré utilisant TensorFlow Federated, où un modèle de réseau de neurones prédit si une entrée est supérieure à 0.5. Les données restent privées pour chaque client, et les mises à jour des poids sont agrégées par le serveur central via l'algorithme Federated Averaging. L'objectif est de minimiser la perte et maximiser la précision du modèle global sur plusieurs rounds, avec des résultats à comparer à un modèle centralisé.

Transféré par

Icherak Bn
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Thèmes abordés

  • TensorFlow,
  • perte globale,
  • fonction d'assignation,
  • clients,
  • exactitude binaire,
  • modèle TFF,
  • optimiseur serveur,
  • assignation des poids,
  • initialisation,
  • précision du modèle

Université -Blida 1- Sécurité des systèmes informatiques

Département d’informatique
M2 ISI

TP : TensorFlow Federated
Exercice 1
Soit un scénario d’apprentissage fédéré avec les contraintes suivantes :
Modèle global :
• Apprentissage supervisé pour prédire si une entrée est supérieure ou non à 0.5, en
utilisant un modèle de réseau de neurones simple.
• Le modèle doit être le même pour tous les clients.
• Les poids du modèle global doivent être mis à jour à chaque round à partir des
contributions locales des clients.
Données locales :
• Chaque client dispose d'un sous-ensemble unique des données globales.
• Les données restent privées et ne sont jamais partagées avec d'autres clients ni avec le
serveur central.
Agrégation des modèles locaux :
• Les mises à jour des poids sont envoyées au serveur central.
• Le serveur utilise l’algorithme Federated Averaging (FedAvg) pour agréger ces mises à
jour de manière optimale.
Travail à faire :
• Minimiser la perte globale et maximiser la précision du modèle global sur l'ensemble
des clients. Résultats meilleurs que : Final Global Model - Loss: 0.4260, Accuracy:
0.9140
• Suivre les performances (précision et perte) sur plusieurs rounds.
• Comparer les performances à celles obtenues avec un modèle centralisé.
Le code :
!pip install --quiet --upgrade tensorflow tensorflow-federated

import tensorflow as tf
import tensorflow_federated as tff
import numpy as np

# 1. Définir un modèle Keras simple


def build_model():
model = [Link]([
[Link](shape=(1,)), # Entrée à une dimension
Université -Blida 1- Sécurité des systèmes informatiques
Département d’informatique
M2 ISI
[Link](10, activation='relu'), # Couche cachée avec 10
neurones
[Link](1, activation='sigmoid') # Couche de sortie
])
return model

# 2. Fonction pour transformer le modèle Keras en un modèle TFF compatible


def model_fn():
keras_model = build_model()
input_spec = (
[Link](shape=[None, 1], dtype=tf.float32), # Spécification des
entrées
[Link](shape=[None, 1], dtype=tf.float32) # Spécification des
étiquettes
)
return [Link].from_keras_model(
keras_model,
input_spec=input_spec,
loss=[Link](),
metrics=[[Link]()]
)

# 3. Définir les optimisateurs pour le client et le serveur


client_optimizer_fn = lambda: [Link](learning_rate=0.1)
server_optimizer_fn = lambda: [Link](learning_rate=1.0)

# 4. Créer un processus d'apprentissage fédéré


federated_training_process = [Link].build_weighted_fed_avg(
model_fn=model_fn,
client_optimizer_fn=client_optimizer_fn,
server_optimizer_fn=server_optimizer_fn
)

# 5. Initialiser le processus fédéré


state = federated_training_process.initialize()

# 6. Générer des données fictives pour l'entraînement fédéré


def generate_data():
x = [Link](1000, 1).astype(np.float32) # Données aléatoires
y = (x > 0.5).astype(np.float32) # Classifier comme 0 ou 1
return x, y

def create_federated_data():
client_data = []
x, y = generate_data()
for i in range(10): # 10 clients fictifs
client_data.append((x[i*100:(i+1)*100], y[i*100:(i+1)*100]))
Université -Blida 1- Sécurité des systèmes informatiques
Département d’informatique
M2 ISI
return client_data

# 7. Préparer les données pour TFF


def preprocess(client_data):
def to_dataset(data):
x, y = data
return [Link].from_tensor_slices((x, y)).batch(20)
return [to_dataset(data) for data in client_data]

federated_data = preprocess(create_federated_data())

# 8. Entraîner le modèle fédéré sur plusieurs rounds


accuracies = []
losses = []
num_rounds = 10

for round_num in range(1, num_rounds + 1):


state, metrics = federated_training_process.next(state, federated_data)

# Naviguer dans les métriques pour extraire les valeurs pertinentes


train_metrics = metrics['client_work']['train']
accuracy = train_metrics.get('binary_accuracy', 0.0)
loss = train_metrics.get('loss', 0.0)

[Link](accuracy)
[Link](loss)

print(f"Round {round_num} - Loss: {loss:.4f}, Accuracy: {accuracy:.4f}")

# 9. Fonction pour assigner les poids au modèle Keras


def assign_weights_to_keras_model(keras_model, tff_weights):
# Les poids TFF sont directement une liste
keras_model.set_weights(tff_weights)

# 10. Charger les poids globaux dans un modèle Keras pour évaluation
final_keras_model = build_model()

# Extraire les poids globaux sous forme de liste


global_weights = federated_training_process.get_model_weights(state).trainable

# Appliquer les poids au modèle Keras


assign_weights_to_keras_model(final_keras_model, global_weights)

# Compiler le modèle pour l'évaluation


final_keras_model.compile(optimizer='sgd',
loss='binary_crossentropy',
Université -Blida 1- Sécurité des systèmes informatiques
Département d’informatique
M2 ISI
metrics=['accuracy'])

# 11. Évaluer le modèle global


x_test, y_test = generate_data()
test_data = [Link].from_tensor_slices((x_test, y_test)).batch(32)
loss, accuracy = final_keras_model.evaluate(test_data, verbose=0)

print(f"\nFinal Global Model - Loss: {loss:.4f}, Accuracy: {accuracy:.4f}")

Vous aimerez peut-être aussi