TensorFlow Federated:分散式資料的機器學習

import tensorflow as tf
tf.compat.v1.enable_v2_behavior()
import tensorflow_federated as tff

# Load simulation data.
source, _ = tff.simulation.datasets.emnist.load_data()
def client_data(n):
  return source.create_tf_dataset_for_client(source.client_ids[n]).map(
      lambda e: (tf.reshape(e['pixels'], [-1]), e['label'])
  ).repeat(10).batch(20)

# Pick a subset of client devices to participate in training.
train_data = [client_data(n) for n in range(3)]

# Grab a single batch of data so that TFF knows what data looks like.
sample_batch = tf.nest.map_structure(
    lambda x: x.numpy(), iter(train_data[0]).next())

# Wrap a Keras model for use with TFF.
def model_fn():
  model = tf.keras.models.Sequential([
      tf.keras.layers.Dense(10, tf.nn.softmax, input_shape=(784,),
                            kernel_initializer='zeros')
  ])
  return tff.learning.from_keras_model(
      model,
      dummy_batch=sample_batch,
      loss=tf.keras.losses.SparseCategoricalCrossentropy(),
      metrics=[tf.keras.metrics.SparseCategoricalAccuracy()])

# Simulate a few rounds of training with the selected client devices.
trainer = tff.learning.build_federated_averaging_process(
  model_fn,
  client_optimizer_fn=lambda: tf.keras.optimizers.SGD(0.1))
state = trainer.initialize()
for _ in range(5):
  state, metrics = trainer.next(state, train_data)
  print (metrics.loss)
  • TensorFlow Federated (TFF) 是適用於機器學習及其他分散資料運算的開放原始碼架構。TFF 的開發目的是促進聯合學習 (FL) 的開放式研究和實驗,聯合學習是一種機器學習方法,針對許多參與的用戶端訓練共用的通用模型,並且讓用戶端將訓練資料保留在本機。舉例來說,FL 已用於訓練行動裝置鍵盤的預測模型,且不會將敏感的輸入資料上傳到伺服器。

    TFF 可讓開發人員在自己的模型和資料上模擬內含的聯合學習演算法,並使用新的演算法進行實驗。TFF 所提供的構成要素也可用於實作非學習運算,例如分散式資料的匯總分析。TFF 的介面分為兩層:

  • 這一層提供了一組高階介面,可讓開發人員將內含的聯合訓練實作和評估套用至現有的 TensorFlow 模型。
  • 系統的核心是一組較低階的介面,在強型類別函式的程式設計環境中結合 TensorFlow 與分散式通訊運算子,以簡潔的方式表示新穎的聯合演算法。這一層也是我們建立聯合學習的基礎。
  • TFF 可讓開發人員透過宣告表示聯合運算,藉此將聯合運算部署至不同的執行階段環境。加入 TFF 是用於實驗的單一機器模擬執行階段。請參閱教學課程,並親自嘗試看看!