本文件介紹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直接為你創建和管理Graph
、Session
對象。此外,自帶的Estimators讓您隻需進行最少的代碼更改就可以嘗試不同的模型架構。例如,DNNClassifier
,這個自帶的Estimator類通過密集的前饋神經網絡訓練分類模型。
自帶的Estimators程序的結構
依賴自帶Estimators的TensorFlow程序通常由以下四個步驟組成:
-
編寫一個或多個數據集導入功能。例如,您可以創建一個函數來導入訓練集,另一個函數導入測試集。每個數據集導入函數都必須返回兩個對象:
- 一個字典,其中的鍵是特征名稱和值是張量(Tensors或SparseTensors)包含相應特征數據
- 包含一個或多個標簽的張量
例如,下麵的代碼演示了輸入函數的基本框架:
def input_fn(dataset): ... # manipulate dataset, extracting feature names and the label return feature_dict, label
(見導入數據了解有關詳細信息。)
-
定義特征列。
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')
-
實例化相關的自帶Estimators。例如,下麵是一個名為
LinearClassifier
自帶Estimators的示例:# Instantiate an estimator, passing the feature columns. estimator = tf.estimator.Estimator.LinearClassifier( feature_columns=[population, crime_rate, median_education], )
-
調用訓練,評估或預測方法。例如,所有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解釋如何編寫模型函數。
推薦工作流程
我們推薦以下工作流程:
- 假設存在一個合適的自帶的Estimators,請使用它來構建您的第一個模型並使用其結果來建立基線。
- 使用此自帶的Estimators構建和測試您的整體流水線,包括數據的完整性和可靠性。
- 如果有合適的可替代的自帶的Estimators可用,運行實驗以確定哪個自帶的Estimators能夠產生最佳結果。
- 可能通過構建您自己的自定義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
。