當前位置: 首頁>>技術教程>>正文


TensorFlow編程指南: Estimators

本文件介紹Estimator – TensorFlow高級API,Estimators大大簡化了機器學習編程,它包含以下功能:

  • 訓練
  • 評測
  • 預測
  • 導出提供服務

您可以使用我們提供的預開發(Tensorflow自帶)的Estimators,也可以編寫自定義Estimators。所有Estimators – 無論是Tensorflow自帶還是用戶自定義 – 都是基於tf.estimator.Estimator類的類。

Estimators的優點

Estimators有以下優點:

  • 您可以在本地主機上或在分布式multi-server環境中運行基於Estimators模型,而無需更改模型。此外,您可以在CPU,GPU或TPU上運行基於Estimators的模型,而無需重新編碼模型。
  • Estimators簡化了模型開發人員之間的實現共享。
  • 您可以使用high-level直觀的代碼開發最先進的模型。簡而言之,使用Estimators創建模型通常比使用low-level TensorFlow API更容易。
  • Estimators本身是建立在tf.layers上,這簡化了自定義操作。
  • Estimators為你建立計算圖。換句話說,你不必自己建立計算圖。
  • Estimators提供安全的分布式訓練循環,控製如何和何時:
    • 建立計算圖
    • 初始化變量
    • 啟動隊列
    • 處理異常
    • 創建檢查點文件並從失敗中恢複
    • 保存TensorBoard的摘要

在使用Estimators編寫應用程序時,必須將數據輸入管道與模型分開。這種分離簡化了使用不同數據集時的實驗開銷。

TensorFlow自帶的Estimators

自帶的Estimators使您能夠在比基本TensorFlow API更高的概念層麵上工作。由於Estimators為您處理所有麻煩的工作,您不必再擔心創建計算圖或會話的問題。也就是說,自帶的Estimators直接為你創建和管理GraphSession對象。此外,自帶的Estimators讓您隻需進行最少的代碼更改就可以嘗試不同的模型架構。例如,DNNClassifier,這個自帶的Estimator類通過密集的前饋神經網絡訓練分類模型。

自帶的Estimators程序的結構

依賴自帶Estimators的TensorFlow程序通常由以下四個步驟組成:

  1. 編寫一個或多個數據集導入功能。例如,您可以創建一個函數來導入訓練集,另一個函數導入測試集。每個數據集導入函數都必須返回兩個對象:

    • 一個字典,其中的鍵是特征名稱和值是張量(Tensors或SparseTensors)包含相應特征數據
    • 包含一個或多個標簽的張量

    例如,下麵的代碼演示了輸入函數的基本框架:

    def input_fn(dataset):
       ...  # manipulate dataset, extracting feature names and the label
       return feature_dict, label
    

    (見導入數據了解有關詳細信息。)

  2. 定義特征列。tf.feature_column標識特征名稱、類型以及任何輸入的預處理。例如,以下片段創建三個保存整數或浮點數據的特征列。前兩個特征列隻是標識特征的名稱和類型。第三個特征列還指定了一個lambda程序來縮放原始數據:

    # Define three numeric feature columns.
    population = tf.feature_column.numeric_column('population')
    crime_rate = tf.feature_column.numeric_column('crime_rate')
    median_education = tf.feature_column.numeric_column('median_education',
                        normalizer_fn='lambda x: x - global_education_mean')
    
  3. 實例化相關的自帶Estimators。例如,下麵是一個名為LinearClassifier自帶Estimators的示例:

    # Instantiate an estimator, passing the feature columns.
    estimator = tf.estimator.Estimator.LinearClassifier(
        feature_columns=[population, crime_rate, median_education],
        )
    
  4. 調用訓練,評估或預測方法。例如,所有Estimators都提供了一個train方法,它訓練一個模型。

    # my_training_set is the function created in Step 1
    estimator.train(input_fn=my_training_set, steps=2000)
    

TensorFlow自帶的Estimators的好處

TensorFlow自帶的Estimators包含最佳實踐,提供以下好處:

  • 確定計算圖的不同部分應該在哪裏運行的最佳實踐,在單個機器或集群上實施策略。
  • 事件(摘要)寫入和普遍有用的摘要的最佳實踐。

如果您不使用自帶的Estimators,則必須自己實現上述功能。

自定義Estimators

每個Estimators的核心 – 無論是係統自帶還是自定義 – 其核心都是模型函數,它是建立訓練,評估和預測圖的方法。當您使用自帶的Estimators時,其他人已經實現了這些模型功能。當依靠自定義的Estimators時,您必須自己編寫模型函數。Creating Estimators in tf.estimator解釋如何編寫模型函數。

我們推薦以下工作流程:

  1. 假設存在一個合適的自帶的Estimators,請使用它來構建您的第一個模型並使用其結果來建立基線。
  2. 使用此自帶的Estimators構建和測試您的整體流水線,包括數據的完整性和可靠性。
  3. 如果有合適的可替代的自帶的Estimators可用,運行實驗以確定哪個自帶的Estimators能夠產生最佳結果。
  4. 可能通過構建您自己的自定義Estimators來進一步改進您的模型。

從Keras模型創建Estimators

您可以將現有的Keras模型轉換為Estimators。這樣做可以使您的Keras模型獲得Estimator的優勢,例如分布式訓練。調用tf.keras.estimator.model_to_estimator,按下例所示的方式:

# Instantiate a Keras inception v3 model.
keras_inception_v3 = tf.keras.applications.inception_v3.InceptionV3(weights=None)
# Compile model with the optimizer, loss, and metrics you'd like to train with.
keras_inception_v3.compile(optimizer=tf.keras.optimizers.SGD(lr=0.0001, momentum=0.9),
                          loss='categorical_crossentropy',
                          metric='accuracy')
# Create an Estimator from the compiled Keras model.
est_inception_v3 = tf.keras.estimator.model_to_estimator(keras_model=keras_inception_v3)
# Treat the derived Estimator as you would any other Estimator. For example,
# the following derived Estimator calls the train method:
est_inception_v3.train(input_fn=my_training_set, steps=2000)

更多詳細信息,請參閱文檔tf.keras.estimator.model_to_estimator

參考資料

本文由《純淨天空》出品。文章地址: https://vimsky.com/zh-tw/article/3648.html,未經允許,請勿轉載。