Chaque partie d'une expérimentation d'apprentissage fédéré doit obtenir un gestionnaire de données pour traiter ses données. Vous ou un spécialiste des données devez créer le gestionnaire de données. Un gestionnaire de données est une classe Python qui charge et transforme les données afin que toutes les données de l'expérimentation soient dans un format cohérent.
A propos de la classe de gestionnaire de données
Le gestionnaire de données exécute les fonctions suivantes:
- Accède aux données requises pour entraîner le modèle. Par exemple, lit les données d'un fichier CSV dans un cadre de données Pandas.
- Prétraite les données de sorte que les données soient dans un format cohérent entre toutes les parties. Voici quelques exemples de cas:
- La colonne Date peut être stockée sous la forme d'une époque ou d'un horodatage.
- La colonne Pays peut être codée ou abrégée.
- Le gestionnaire de données s'assure que le formatage des données est en accord.
- Facultatif: ingénieur de fonction selon les besoins.
L'illustration suivante montre comment un gestionnaire de données est utilisé pour traiter des données et les rendre consommables par l'expérimentation:
Une partie peut disposer de plusieurs tables dans une base de données relationnelle tandis qu'une autre partie utilise un fichier CSV. Une fois les données traitées par le gestionnaire de données, elles auront un format unifié. Par exemple, toutes les données sont regroupées dans un seul tableau, les données précédentes étant regroupées dans des tableaux séparés.
Modèle de gestionnaire de données
Un modèle de gestionnaire de données général se présente comme suit:
# your import statements
from ibmfl.data.data_handler import DataHandler
class MyDataHandler(DataHandler):
"""
Data handler for your dataset.
"""
def __init__(self, data_config=None):
super().__init__()
self.file_name = None
if data_config is not None:
# This can be any string field.
# For example, if your data set is in `csv` format,
# <your_data_file_type> can be "CSV", ".csv", "csv", "csv_file" and more.
if '<your_data_file_type>' in data_config:
self.file_name = data_config['<your_data_file_type>']
# extract other additional parameters from `info` if any.
# load and preprocess the training and testing data
self.load_and_preprocess_data()
"""
# Example:
# (self.x_train, self.y_train), (self.x_test, self.y_test) = self.load_dataset()
"""
def load_and_preprocess_data(self):
"""
Loads and pre-processeses local datasets,
and updates self.x_train, self.y_train, self.x_test, self.y_test.
# Example:
# return (self.x_train, self.y_train), (self.x_test, self.y_test)
"""
pass
def get_data(self):
"""
Gets the prepared training and testing data.
:return: ((x_train, y_train), (x_test, y_test)) # most build-in training modules expect data is returned in this format
:rtype: `tuple`
This function should be as brief as possible. Any pre-processing operations should be performed in a separate function and not inside get_data(), especially computationally expensive ones.
# Example:
# X, y = load_somedata()
# x_train, x_test, y_train, y_test = \
# train_test_split(X, y, test_size=TEST_SIZE, random_state=RANDOM_STATE)
# return (x_train, y_train), (x_test, y_test)
"""
pass
def preprocess(self, X, y):
pass
Paramètres
your_data_file_type
: il peut s'agir de n'importe quelle zone de chaîne. Par exemple, si votre ensemble de données est au formatcsv
,your_data_file_type
peut être "CSV", ". csv", "csv", "csv_file", etc.
Renvoi d'un générateur de données défini par Keras ou Tensorflow
Voici un exemple de code qui doit être inclus dans le cadre de la fonction get_data
pour renvoyer un générateur de données défini par Keras ou Tensorflow:
train_gen = ImageDataGenerator(rotation_range=8,
width_sht_range=0.08,
shear_range=0.3,
height_shift_range=0.08,
zoom_range=0.08)
train_datagenerator = train_gen.flow(
x_train, y_train, batch_size=64)
return train_datagenerator
Exemples de gestionnaire de données
Rubrique parent: Création d'une expérimentation d'apprentissage fédéré