tf.estimator模塊
定義在:tensorflow/python/estimator/estimator_lib.py
估算器(Estimator): 用於處理模型的高級工具。
主要模塊
export 模塊:用於導出估算器的實用方法。
inputs 模塊:用於創建簡單的 input_fns 的實用方法。
類
class DNNClassifier:TensorFlow DNN 模型的分類器。
class DNNLinearCombinedClassifier:TensorFlow Linear 和 DNN 連接的分類模型的估計器。
class DNNLinearCombinedRegressor:TensorFlow Linear 和 DNN 連接的回歸模型的估計器。
class DNNRegressor:TensorFlow DNN 模型的回歸器。
class Estimator:用於訓練和評估 TensorFlow 模型的估計器類。
class EstimatorSpec:從 model_fn 返回的操作和對象,並傳遞給 Estimator。
class LinearClassifier:線性分類器模型。
class LinearRegressor:TensorFlow 線性回歸問題的估計器。
class ModeKeys:模型模式的標准名稱。
class RunConfig:此類指定 Estimator 運行的配置。
函數
classifier_parse_example_spec(...):為 tf.parse_example 生成用於分類器的解析規范。
regressor_parse_example_spec(...):為 tf.parse_example 生成用於回歸的解析規范。
tf.estimator.classifier_parse_example_spec 生成解析規范
classifier_parse_example_spec( feature_columns, label_key, label_dtype=tf.int64, label_default=None, weight_column=None )
定義在:tensorflow/python/estimator/canned/parsing_utils.py。
生成用於分類器的 tf.parse_example 的解析規范。
如果用戶將數據保存在 tf.Example 格式中,則需要使用適當的函數參數調用 tf. parse_example。此實用程序有兩個主要的幫助:
- 用戶需要將函數的解析規范與標簽和權重(如果有的話)相結合,因為它們都是從相同的 tf.Example 實例中解析出來的。該實用程序組合了這些規范。
- 通過分類器(如 DNNClassifie)將預期標簽映射到相應的 tf.parse_example 規范是很困難的。該實用程序通過用戶(key,dtype)獲取相關信息對其進行編碼。
解析規范示例輸出:
# Define features and transformations feature_b = tf.feature_column.numeric_column(...) feature_c_bucketized = tf.feature_column.bucketized_column( tf.feature_column.numeric_column("feature_c"), ...) feature_a_x_feature_c = tf.feature_column.crossed_column( columns=["feature_a", feature_c_bucketized], ...) feature_columns = [feature_b, feature_c_bucketized, feature_a_x_feature_c] parsing_spec = tf.estimator.classifier_parse_example_spec( feature_columns, label_key='my-label', label_dtype=tf.string) # For the above example, classifier_parse_example_spec would return the dict: assert parsing_spec == { "feature_a": parsing_ops.VarLenFeature(tf.string), "feature_b": parsing_ops.FixedLenFeature([1], dtype=tf.float32), "feature_c": parsing_ops.FixedLenFeature([1], dtype=tf.float32) "my-label" : parsing_ops.FixedLenFeature([1], dtype=tf.string) }
分類器使用示例:
feature_columns = # define features via tf.feature_column estimator = DNNClassifier( n_classes=1000, feature_columns=feature_columns, weight_column='example-weight', label_vocabulary=['photos', 'keep', ...], hidden_units=[256, 64, 16]) # This label configuration tells the classifier the following: # * weights are retrieved with key 'example-weight' # * label is string and can be one of the following ['photos', 'keep', ...] # * integer id for label 'photos' is 0, 'keep' is 1, ... # Input builders def input_fn_train(): # Returns a tuple of features and labels. features = tf.contrib.learn.read_keyed_batch_features( file_pattern=train_files, batch_size=batch_size, # creates parsing configuration for tf.parse_example features=tf.estimator.classifier_parse_example_spec( feature_columns, label_key='my-label', label_dtype=tf.string, weight_column='example-weight'), reader=tf.RecordIOReader) labels = features.pop('my-label') return features, labels estimator.train(input_fn=input_fn_train)
ARGS:
- feature_columns:一個包含所有特征列的 iterable。所有項目都應該是從 _FeatureColumn 派生的類的實例。
- label_key:標識標簽的字符串。這意味着 tf.Example 使用這個鍵存儲標簽。
- label_dtype:一個 tf.dtype 標識標簽的類型。默認情況下是 tf.int64。如果用戶定義了一個 label_vocabulary,則應將其設置為 tf.string。tf.float32 標簽僅支持二進制分類。
- label_default:如果在給定的 tf.Example 中不存在 label_key,則用作標簽。一個示例用法:假設 label_key 是 “clicked”,並且 tf.Example 僅包含以下 key 格式的正示例的點擊數據:clicked, value:1。這意味着如果沒有鍵 “clicked” 的數據,應該通過設置 label_deafault=0 來計算為負的示例。該值的類型應與 label_dtype 兼容。
- weight_column:通過 tf.feature_column.numeric_column 創建的一個字符串或者 _NumericColumn,用來定義表示權重的特征列。在訓練過程中,它用於降低權重或增加實例。它將乘以示例的損失。如果它是一個字符串,它被用作 key 並從特征中獲取權重張量。如果是 _NumericColumn,則通過鍵weight_column.key 獲取原始張量,然后在其上應用 weight_column.normalizer_fn 以獲得權重張量。
返回:
返回一個字典將每個特征鍵映射到 FixedLenFeature 或 VarLenFeature 值。
注意:
- ValueError:如果標簽中使用 feature_columns。
- ValueError:如果在 feature_columns 中使用 weight_column 。
- ValueError:如果給定的 feature_columns 不是一個 _FeatureColumn 實例。
- ValueError:如果 weight_column 不是一個 _NumericColumn 實例。
- ValueError:如果 label_key 為 None。
tf.estimator.DNNClassifier
使用DNN模型分類器
DNNClassifier 類
繼承自: Estimator
定義在:tensorflow/python/estimator/canned/dnn.py。
TensorFlow DNN 模型的分類器。
例:
sparse_feature_a = sparse_column_with_hash_bucket(...) sparse_feature_b = sparse_column_with_hash_bucket(...) sparse_feature_a_emb = embedding_column(sparse_id_column=sparse_feature_a, ...) sparse_feature_b_emb = embedding_column(sparse_id_column=sparse_feature_b, ...) estimator = DNNClassifier( feature_columns=[sparse_feature_a_emb, sparse_feature_b_emb], hidden_units=[1024, 512, 256]) # Or estimator using the ProximalAdagradOptimizer optimizer with # regularization. estimator = DNNClassifier( feature_columns=[sparse_feature_a_emb, sparse_feature_b_emb], hidden_units=[1024, 512, 256], optimizer=tf.train.ProximalAdagradOptimizer( learning_rate=0.1, l1_regularization_strength=0.001 )) # Input builders def input_fn_train: # returns x, y pass estimator.train(input_fn=input_fn_train, steps=100) def input_fn_eval: # returns x, y pass metrics = estimator.evaluate(input_fn=input_fn_eval, steps=10) def input_fn_predict: # returns x, None pass predictions = estimator.predict(input_fn=input_fn_predict)
輸入的 train 和 evaluate 應具有以下特點,否則將會產生 KeyError:
- 如果 weight_column 不是 None,則有特性:key=weight_column,其值為張量。
- 對於 feature_columns 中的每一列:
- 如果列是 _CategoricalColumn,則有特性:key=column.name,其值是一個 SparseTensor。
- 如果列是一個 _WeightedCategoricalColumn,則有兩個特性:第一個是帶有 key 的 id 列名稱,第二個是帶有 key 的權重列名稱。這兩個特性的值必須是SparseTensor。
- 如果列是 _DenseColumn,則有一個特性:key=column.name,其值是一個 Tensor。
損失是通過使用 softmax 交叉熵計算的。
屬性
- config
- model_dir
- params
方法
__init__
__init__( hidden_units, feature_columns, model_dir=None, n_classes=2, weight_column=None, label_vocabulary=None, optimizer='Adagrad', activation_fn=tf.nn.relu, dropout=None, input_layer_partitioner=None, config=None )
初始化一個 DNNClassifier 實例。
ARGS:
- hidden_units:每層隱藏單元的 Iterable 數。所有層都完全連接。注意:[64, 32]意味着第一層有64個節點,第二層有32個節點。
- feature_columns:包含模型使用的所有特征列的 iterable。集合中的所有項目都應該是從 _FeatureColumn 派生的類的實例。
- model_dir:用來保存模型參數,圖形等的目錄。這也可用於將檢查點從目錄加載到 estimator 中,以繼續訓練以前保存的模型。
- n_classes:標簽類的數量。默認為 2,即二進制分類,必須大於1。
- weight_column:通過 tf.feature_column.numeric_column 創建的一個字符串或者 _NumericColumn,用來定義表示權重的特征列。在訓練過程中,它用於降低權重或增加實例。它將乘以示例的損失。如果它是一個字符串,則被用作從特征中中獲取權重張量的 key;如果是 _NumericColumn,則通過鍵 weight_column.key 獲取原始張量,然后在其上應用 weight_column.normalizer_fn 以獲得權重張量。
- label_vocabulary:字符串列表,表示可能的標簽值。如果給定,標簽必須是字符串類型,並且 label_vocabulary 具有任何值。如果沒有給出,這意味着標簽已經被編碼為整數或者在[0,1]內浮動, n_classes=2 ;並且被編碼為{0,1,...,n_classes-1}中的整數值,n_classes> 2。如果沒有提供詞匯表並且標簽是字符串,也會出現錯誤。
- optimizer:tf.Optimizer 用於訓練模型的實例。默認為 Adagrad 優化器。
- activation_fn:激活函數應用於每個層。如果為 None,將使用 tf.nn.relu。
- dropout:當不是 None 時,我們將放棄給定坐標的概率。
- input_layer_partitioner: (可選)輸入層分區。默認為 min_max_variable_partitioner 與 min_slice_size64 << 20。
- config:RunConfig 對象配置運行時設置。
evaluate
evaluate( input_fn, steps=None, hooks=None, checkpoint_path=None, name=None )
評估給定的評估數據 input_fn 的模型。
對於每個步驟,調用 input_fn,它返回一組數據。評估結束條件:達到 - steps 批處理,或 - input_fn 引發 end-of-input 異常(OutOfRangeError 或 StopIteration)。ARGS:
- input_fn:輸入函數返回一個元組:features - Dictionary 的字符串特征名到 Tensor 或 SparseTensor。labels - Tensor或帶標簽的張量字典。
- steps:評估模型的步驟數。如果為 None,直到 input_fn 引發 end-of-input 異常時,評估結束。
- hooks:SessionRunHook 子類實例的列表,用於評估調用中的回調。
- checkpoint_path:要評估的特定檢查點的路徑。如果為 None,則使用 model_dir 中的最新檢查點。
- name:如果用戶需要在不同數據集上運行多個評估,例如培訓數據與測試數據,則設置評估的名稱。不同評估的度量值保存在單獨的文件夾中,並在 tensorboard 中單獨顯示。
返回:
包含 model_fn 按名稱鍵入指定的評估度量的 dict ,以及一個條目 global_step,它包含執行此評估的全局步驟值。
注意:
- ValueError:如果 steps <= 0。
- ValueError:如果沒有訓練模型,即 model_dir,或者給定的 checkpoint_path 是空的。
export_savedmodel
export_savedmodel( export_dir_base, serving_input_receiver_fn, assets_extra=None, as_text=False, checkpoint_path=None )
將推理圖作為 SavedModel 導出到給定的目錄中。
此方法首先調用 serve_input_receiver_fn 來獲取特征 Tensors,然后調用此 Estimator 的 model_fn 以生成基於這些特征的模型圖,從而構建新的圖。它在新的會話中將給定的檢查點(或缺少最新的檢查點)還原到此圖中。最后,它在給定的 export_dir_base 下面創建一個時間戳的導出目錄,並將 SavedModel 寫入其中,其中包含從此會話保存的單個 MetaGraphDef。
導出的 MetaGraphDef 將為從 model_fn 返回的 export_outputs 字典的每個元素提供一個 SignatureDef,使用相同的鍵命名。這些密鑰之一始終是signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY,指示當一個服務請求沒有指定時將提供哪個簽名。對於每個簽名,輸出由相應的ExportOutputs 提供,並且輸入始終是由 serve_input_receiver_fn 提供的輸入接收器。
額外的資產可以通過 extra_assets 參數寫入 SavedModel。這應該是一個 dict,其中每個鍵都給出了相對於 assets.extra 目錄的目標路徑(包括文件名)。相應的值給出要復制的源文件的完整路徑。例如,復制單個文件而不重命名的簡單情況被指定為:{'my_asset_file.txt': '/path/to/my_asset_file.txt'}。
ARGS:
- export_dir_base:一個包含一個目錄的字符串,用於創建包含導出的 SavedModels 的時間戳子目錄。
- serving_input_receiver_fn:一個不帶參數並返回 ServingInputReceiver 的函數。
- assets_extra:指定如何在導出的 SavedModel 中填充 asset.extra 目錄的 dict,如果為 None,則不需要額外的資源。
- as_text:是否以文本格式寫入 SavedModel 原型。
- checkpoint_path:要導出的檢查點路徑。如果為 None(默認值),則選擇在模型目錄中找到的最新檢查點。
返回:
導出目錄的字符串路徑。
注意:
- ValueError:如果沒有提供 serve_input_receiver_fn,則不提供 export_outputs,或者沒有找到任何檢查點。
predict
predict( input_fn, predict_keys=None, hooks=None, checkpoint_path=None )
返回給定功能的預測。
ARGS:
- input_fn:輸入函數返回的特征,是字符串特征名稱字典的 Tensor 或 SparseTensor。如果它返回一個元組,則第一個項目被提取為特征。預測繼續,直到input_fn 引發 end-of-input 異常(OutOfRangeError 或 StopIteration)。
- predict_keys:str 列表,要預測的鍵的名稱。如果 EstimatorSpec.predictions 是 dict,則使用它。如果使用 predict_keys,那么其余的預測將從字典中過濾掉。如果為 None,則返回所有。
- hooks:SessionRunHook 子類實例列表。用於預測調用內的回調。
- checkpoint_path:對具體檢查點的路徑進行預測。如果為 None,則使用 model_dir 中的最新檢查點。
獲取:
計算預測張量的值。
注意:
- ValueError:在 model_dir 中找不到訓練有素的模型。
- ValueError:如果批量長度的預測不一致。
- ValueError:如果 predict_keys 和 predictions 之間存在沖突。例如,如果 predict_keys 不是 None,但 EstimatorSpec.predictions 不是 dict。
train
train( input_fn, hooks=None, steps=None, max_steps=None )
訓練一個給定訓練數據 input_fn 的模型。
ARGS:
- input_fn:輸入函數返回一個元組:features - Dictionary 的字符串特征名到 Tensor 或 SparseTensor。labels - Tensor 或帶標簽的張量字典。
- hooks:SessionRunHook 子類實例列表。用於訓練循環內的回調。
- steps:用於訓練模型的步驟數。如果為 None,永遠訓練或訓練直到 input_fn 生成 OutOfRange 或 StopIteration 錯誤。“steps”是逐步進行的。如果你調用兩次 train(steps = 10),那么 train 總共有20步。如果 OutOfRange 或 StopIteration 在中間出現差錯,train將在前20步之前停止。如果您不想增加行為,請設置 max_steps 代替。如果設置,max_steps 必須為 None。
- max_steps:用於 train 模型的總步驟數。如果為 None,永遠訓練或訓練,直到 input_fn 生成 OutOfRange 或 StopIteration 錯誤。如果設置,steps 必須為None。如果 OutOfRange 或者 StopIteration 在中間出現差錯,訓練之前應停止 max_steps 步驟。兩次調用 train (steps=100) 意味着 200次 train 迭代。另一方面,兩個調用 train(max_steps=100)意味着第二次調用將不會執行任何迭代,因為第一次調用完成了所有的100個步驟。
返回:
返回 self,用於鏈接。
注意:
- ValueError:如果兩個 steps 和 max_steps 都不是 None。
- ValueError:如果任一 steps 或是 max_steps <= 0。
tf.estimator.DNNLinearCombinedClassifier
DNNLinearCombinedClassifier 類
繼承自: Estimator
定義在:tensorflow/python/estimator/canned/dnn_linear_combined.py。
TensorFlow Linear 和 DNN 的估算器(estimator)加入了分類模型。
注意:此估算器(estimator)也稱為 wide-n-deep。
例:
numeric_feature = numeric_column(...) sparse_column_a = categorical_column_with_hash_bucket(...) sparse_column_b = categorical_column_with_hash_bucket(...) sparse_feature_a_x_sparse_feature_b = crossed_column(...) sparse_feature_a_emb = embedding_column(sparse_id_column=sparse_feature_a, ...) sparse_feature_b_emb = embedding_column(sparse_id_column=sparse_feature_b, ...) estimator = DNNLinearCombinedClassifier( # wide settings linear_feature_columns=[sparse_feature_a_x_sparse_feature_b], linear_optimizer=tf.train.FtrlOptimizer(...), # deep settings dnn_feature_columns=[ sparse_feature_a_emb, sparse_feature_b_emb, numeric_feature], dnn_hidden_units=[1000, 500, 100], dnn_optimizer=tf.train.ProximalAdagradOptimizer(...)) # To apply L1 and L2 regularization, you can set optimizers as follows: tf.train.ProximalAdagradOptimizer( learning_rate=0.1, l1_regularization_strength=0.001, l2_regularization_strength=0.001) # It is same for FtrlOptimizer. # Input builders def input_fn_train: # returns x, y pass estimator.train(input_fn=input_fn_train, steps=100) def input_fn_eval: # returns x, y pass metrics = estimator.evaluate(input_fn=input_fn_eval, steps=10) def input_fn_predict: # returns x, None pass predictions = estimator.predict(input_fn=input_fn_predict)
輸入的 train 和 evaluate 應具有以下特點,否則將會產生 KeyError:
- 對於 dnn_feature_columns+ linear_feature_columns 中的每一列:
- 如果列是 _CategoricalColumn,則具有 key=column.name 並且其值是一個 SparseTensor 的特點。
- 如果列是一個 _WeightedCategoricalColumn,則具有兩個特點:第一個是帶有鍵的 ID 列名稱,第二個是具有鍵權重列名稱。這兩個特點的值必須是SparseTensor。
- 如果列是 _DenseColumn,則有特點:key = column.name 並且其值是一個 Tensor。
利用 softmax 交叉熵計算損失。
屬性
- config
- model_dir
- params
方法
__init__
__init__( model_dir=None, linear_feature_columns=None, linear_optimizer='Ftrl', dnn_feature_columns=None, dnn_optimizer='Adagrad', dnn_hidden_units=None, dnn_activation_fn=tf.nn.relu, dnn_dropout=None, n_classes=2, weight_column=None, label_vocabulary=None, input_layer_partitioner=None, config=None )
初始化 DNNLinearCombinedClassifier 實例。
ARGS:
- model_dir:保存模型參數、圖形等的目錄。這也可用於將檢查點從目錄加載到估算器中,以繼續訓練以前保存的模型。
- linear_feature_columns:包含模型線性部分使用的所有特征列的 iterable(迭代)。集合中的所有項目都必須是從 FeatureColumn 派生的類的實例。
- linear_optimizer:tf.Optimizer 用於將漸變應用於模型的線性部分的實例。默認為 FTRL 優化器。
- dnn_feature_columns:包含模型深層部分所使用的所有特征列的 iterable。集合中的所有項目都必須是從 FeatureColumn 派生的類的實例。
- dnn_optimizer:tf.Optimizer 用於將漸變應用於模型的深層部分的實例。默認為 Adagrad 優化器。
- dnn_hidden_units:每層隱藏單位的列表。所有層都完全連接。
- dnn_activation_fn:激活函數應用於每個層。如果無,將使用 tf.nn.relu。
- dnn_dropout:當不是 None 時,我們將放棄一個給定的坐標的概率。
- n_classes:標簽類的數量。默認為 2,即二進制分類,必須大於1。
- weight_column:通過 tf.feature_column.numeric_column 創建的一個字符串或者 _NumericColumn 用來定義表示權重的特征列。在 train 過程中,它用於降低權重或增加實例。它將乘以例子的損失。如果它是一個字符串,它是用來作為一個鍵從特征提取權重張量;如果是 _NumericColumn,則通過鍵獲取原始張量weight_column.key,然后在其上應用 weight_column.normalizer_fn 以獲得權重張量。
- label_vocabulary:字符串列表表示可能的標簽值。如果給定,標簽必須是字符串類型,並且在 label_vocabulary 中具有任何值。如果沒有給出,這意味着標簽已經被編碼為整數或者在[0,1]內浮動, n_classes=2 ;並且被編碼為{0,1,...,n_classes-1}中的整數值,n_classes> 2。如果沒有提供詞匯表並且標簽是字符串,也會出現錯誤。
- input_layer_partitioner:輸入層分區。默認為 min_max_variable_partitioner 與 min_slice_size64 << 20。
- config:RunConfig 對象配置運行時設置。
注意:
- ValueError:如果 linear_feature_columns 和 dnn_features_columns 都同時為空。
evaluate
evaluate( input_fn, steps=None, hooks=None, checkpoint_path=None, name=None )
評估給定的評估數據 input_fn 的模型。
對於每個步驟,調用 input_fn,它返回一組數據。評估結束條件:達到 - steps 批處理,或 - input_fn 引發 end-of-input 異常(OutOfRangeError 或 StopIteration)。
ARGS:
- input_fn:輸入函數返回一個元組:features - Dictionary 的字符串特征名到 Tensor 或 SparseTensor。labels - Tensor或帶標簽的張量字典(dict)。
- steps:評估模型的步驟數。如果為 None,直到 input_fn 引發 end-of-input 異常時,評估結束。
- hooks:SessionRunHook 子類實例的列表,用於評估調用中的回調。
- checkpoint_path:要評估的特定檢查點的路徑。如果為 None,則使用 model_dir 中的最新檢查點。
- name:如果用戶需要在不同數據集上運行多個評估,例如培訓數據與測試數據,則設置評估的名稱。不同評估的度量值保存在單獨的文件夾中,並在 tensorboard 中單獨顯示。
返回:
包含 model_fn 按名稱鍵入指定的評估度量的 dict ,以及一個條目 global_step,它包含執行此評估的全局步驟值。
注意:
- ValueError:如果 steps <= 0。
- ValueError:如果沒有 train 模型,即 model_dir,或者給定的 checkpoint_path 是空的。
export_savedmodel
export_savedmodel( export_dir_base, serving_input_receiver_fn, assets_extra=None, as_text=False, checkpoint_path=None )
將推理圖作為 SavedModel 導出到給定的目錄中。
此方法首先調用 serve_input_receiver_fn 來獲取特征 Tensors,然后調用此 Estimator 的 model_fn 以生成基於這些特征的模型圖,從而構建新的圖。它在新的會話中將給定的檢查點(或缺少最新的檢查點)還原到此圖中。最后,它在給定的 export_dir_base 下面創建一個時間戳的導出目錄,並將 SavedModel 寫入其中,其中包含從此會話保存的單個 MetaGraphDef。
導出的 MetaGraphDef 將為從 model_fn 返回的 export_outputs 字典的每個元素提供一個 SignatureDef,使用相同的鍵命名。這些密鑰之一始終是signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY,指示當一個服務請求沒有指定時將提供哪個簽名。對於每個簽名,輸出由相應的ExportOutputs 提供,並且輸入始終是由 serve_input_receiver_fn 提供的輸入接收器。
額外的資產可以通過 extra_assets 參數寫入 SavedModel。這應該是一個 dict,其中每個鍵都給出了相對於 assets.extra 目錄的目標路徑(包括文件名)。相應的值給出要復制的源文件的完整路徑。例如,復制單個文件而不重命名的簡單情況被指定為:{'my_asset_file.txt': '/path/to/my_asset_file.txt'}。
ARGS:
- export_dir_base:一個包含一個目錄的字符串,用於創建包含導出的 SavedModels 的時間戳子目錄。
- serving_input_receiver_fn:一個不帶參數並返回 ServingInputReceiver 的函數。
- assets_extra:指定如何在導出的 SavedModel 中填充 asset.extra 目錄的 dict,如果為 None,則不需要額外的資源。
- as_text:是否以文本格式寫入 SavedModel 原型。
- checkpoint_path:要導出的檢查點路徑。如果為 None(默認值),則選擇在模型目錄中找到的最新檢查點。
返回:
導出目錄的字符串路徑。
注意:
- ValueError:如果沒有提供 serve_input_receiver_fn,則不提供 export_outputs,或者沒有找到任何檢查點。
predict
predict( input_fn, predict_keys=None, hooks=None, checkpoint_path=None )
返回給定功能的預測。
ARGS:
- input_fn:輸入函數返回的特征,是字符串特征名稱字典的 Tensor 或 SparseTensor。如果它返回一個元組,則第一個項目被提取為特征。預測繼續,直到input_fn 引發 end-of-input 異常(OutOfRangeError 或 StopIteration)。
- predict_keys:str 列表,要預測的鍵的名稱。如果 EstimatorSpec.predictions 是 dict,則使用它。如果使用 predict_keys,那么其余的預測將從字典中過濾掉。如果為 None,則返回所有。
- hooks:SessionRunHook 子類實例列表。用於預測調用內的回調。
- checkpoint_path:對具體檢查點的路徑進行預測。如果為 None,則使用 model_dir 中的最新檢查點。
得到:
計算預測張量的值。
注意:
- ValueError:在 model_dir 中找不到訓練有素的模型。
- ValueError:如果批量長度的預測不一致。
- ValueError:如果 predict_keys 和 predictions 之間存在沖突。例如,如果 predict_keys 不是 None,但 EstimatorSpec.predictions 不是 dict。
train
train( input_fn, hooks=None, steps=None, max_steps=None )
訓練一個給定訓練數據 input_fn 的模型。
ARGS:
- input_fn:輸入函數返回一個元組:features - Dictionary 的字符串特征名到 Tensor 或 SparseTensor。labels - Tensor 或帶標簽的張量字典。
- hooks:SessionRunHook 子類實例列表。用於訓練循環內的回調。
- steps:用於訓練模型的步驟數。如果為 None,永遠訓練或訓練直到 input_fn 生成 OutOfRange 或 StopIteration 錯誤。“steps”是逐步進行的。如果你調用兩次 train(steps = 10),那么 train 總共有20步。如果 OutOfRange 或 StopIteration 在中間出現差錯,train將在前20步之前停止。如果您不想增加行為,請設置 max_steps 代替。如果設置,max_steps 必須為 None。
- max_steps:用於 train 模型的總步驟數。如果為 None,永遠訓練或訓練,直到 input_fn 生成 OutOfRange 或 StopIteration 錯誤。如果設置,steps 必須為None。如果 OutOfRange 或者 StopIteration 在中間出現差錯,訓練之前應停止 max_steps 步驟。兩次調用 train (steps=100) 意味着 200次 train 迭代。另一方面,兩個調用 train(max_steps=100)意味着第二次調用將不會執行任何迭代,因為第一次調用完成了所有的100個步驟。
返回:
返回 self,用於鏈接。
注意:
- ValueError:如果兩個 steps 和 max_steps 都不是 None。
- ValueError:如果任一 steps 或是 max_steps <= 0。
tf.estimator.DNNLinearCombinedRegressor DNN回歸模型
DNNLinearCombinedRegressor 類
繼承自: Estimator
定義在:tensorflow/python/estimator/canned/dnn_linear_combined.py。
TensorFlow Linear 和 DNN 的估計器加入了回歸模型。
注意:此估計器(estimator)也稱為 wide-n-deep。
例如:
numeric_feature = numeric_column(...) sparse_column_a = categorical_column_with_hash_bucket(...) sparse_column_b = categorical_column_with_hash_bucket(...) sparse_feature_a_x_sparse_feature_b = crossed_column(...) sparse_feature_a_emb = embedding_column(sparse_id_column=sparse_feature_a, ...) sparse_feature_b_emb = embedding_column(sparse_id_column=sparse_feature_b, ...) estimator = DNNLinearCombinedRegressor( # wide settings linear_feature_columns=[sparse_feature_a_x_sparse_feature_b], linear_optimizer=tf.train.FtrlOptimizer(...), # deep settings dnn_feature_columns=[ sparse_feature_a_emb, sparse_feature_b_emb, numeric_feature], dnn_hidden_units=[1000, 500, 100], dnn_optimizer=tf.train.ProximalAdagradOptimizer(...)) # To apply L1 and L2 regularization, you can set optimizers as follows: tf.train.ProximalAdagradOptimizer( learning_rate=0.1, l1_regularization_strength=0.001, l2_regularization_strength=0.001) # It is same for FtrlOptimizer. # Input builders def input_fn_train: # returns x, y pass estimator.train(input_fn=input_fn_train, steps=100) def input_fn_eval: # returns x, y pass metrics = estimator.evaluate(input_fn=input_fn_eval, steps=10) def input_fn_predict: # returns x, None pass predictions = estimator.predict(input_fn=input_fn_predict)
輸入的 train 和 evaluate 應具有以下特點,否則將會產生 KeyError:
- 對於 dnn_feature_columns+ linear_feature_columns 中的每一列:
- 如果列是 _CategoricalColumn,則具有 key=column.name 並且其值是一個 SparseTensor 的特點。
- 如果列是一個 _WeightedCategoricalColumn,則具有兩個特點:第一個是帶有鍵的 ID 列名稱,第二個是具有鍵權重列名稱。這兩個特點的值必須是SparseTensor。
- 如果列是 _DenseColumn,則有特點:key = column.name 並且其值是一個 Tensor。
損失通過使用均方誤差計算。
屬性
- config
- model_dir
- params
方法
__init__
__init__( model_dir=None, linear_feature_columns=None, linear_optimizer='Ftrl', dnn_feature_columns=None, dnn_optimizer='Adagrad', dnn_hidden_units=None, dnn_activation_fn=tf.nn.relu, dnn_dropout=None, label_dimension=1, weight_column=None, input_layer_partitioner=None, config=None )
初始化 DNNLinearCombinedRegressor 實例。
ARGS:
- model_dir:保存模型參數、圖形等的目錄。這也可用於將檢查點從目錄加載到估算器中,以繼續訓練以前保存的模型。
- linear_feature_columns:包含模型線性部分使用的所有特征列的 iterable(迭代)。集合中的所有項目都必須是從 FeatureColumn 派生的類的實例。
- linear_optimizer:tf.Optimizer 用於將漸變應用於模型的線性部分的實例。默認為 FTRL 優化器。
- dnn_feature_columns:包含模型深層部分所使用的所有特征列的 iterable。集合中的所有項目都必須是從 FeatureColumn 派生的類的實例。
- dnn_optimizer:tf.Optimizer 用於將漸變應用於模型的深層部分的實例。默認為 Adagrad 優化器。
- dnn_hidden_units:每層隱藏單位的列表。所有層都完全連接。
- dnn_activation_fn:激活函數應用於每個層。如果無,將使用 tf.nn.relu。
- dnn_dropout:當不是 None 時,我們將放棄一個給定的坐標的概率。
- label_dimension:每個例子的回歸目標數。這是標簽和 logits Tensor 對象的最后一個維度的大小(通常它們具有形狀 [batch_size, label_dimension])。
- weight_column:通過 tf.feature_column.numeric_column 創建的一個字符串或者 _NumericColumn 用來定義表示權重的特征列。在 train 過程中,它用於降低權重或增加實例。它將乘以例子的損失。如果它是一個字符串,它是用來作為一個鍵從特征提取權重張量;如果是 _NumericColumn,則通過鍵獲取原始張量weight_column.key,然后在其上應用 weight_column.normalizer_fn 以獲得權重張量。
- input_layer_partitioner:輸入層分區。默認為 min_max_variable_partitioner 與 min_slice_size64 << 20。
- config:RunConfig 對象配置運行時設置。
注意:
- ValueError:如果 linear_feature_columns 和 dnn_features_columns 都同時為空。
evaluate
evaluate( input_fn, steps=None, hooks=None, checkpoint_path=None, name=None )
評估給定的評估數據 input_fn 的模型。
對於每個步驟,調用 input_fn,它返回一組數據。評估結束條件:達到 - steps 批處理,或 - input_fn 引發 end-of-input 異常(OutOfRangeError 或 StopIteration)。
ARGS:
- input_fn:輸入函數返回一個元組:features - Dictionary 的字符串特征名到 Tensor 或 SparseTensor。labels - Tensor或帶標簽的張量字典(dict)。
- steps:評估模型的步驟數。如果為 None,直到 input_fn 引發 end-of-input 異常時,評估結束。
- hooks:SessionRunHook 子類實例的列表,用於評估調用中的回調。
- checkpoint_path:要評估的特定檢查點的路徑。如果為 None,則使用 model_dir 中的最新檢查點。
- name:如果用戶需要在不同數據集上運行多個評估,例如培訓數據與測試數據,則設置評估的名稱。不同評估的度量值保存在單獨的文件夾中,並在 tensorboard 中單獨顯示。
返回:
包含 model_fn 按名稱鍵入指定的評估度量的 dict ,以及一個條目 global_step,它包含執行此評估的全局步驟值。
注意:
- ValueError:如果 steps <= 0。
- ValueError:如果沒有 train 模型,即 model_dir,或者給定的 checkpoint_path 是空的。
export_savedmodel
export_savedmodel( export_dir_base, serving_input_receiver_fn, assets_extra=None, as_text=False, checkpoint_path=None )
將推理圖作為 SavedModel 導出到給定的目錄中。
此方法首先調用 serve_input_receiver_fn 來獲取特征 Tensors,然后調用此 Estimator 的 model_fn 以生成基於這些特征的模型圖,從而構建新的圖。它在新的會話中將給定的檢查點(或缺少最新的檢查點)還原到此圖中。最后,它在給定的 export_dir_base 下面創建一個時間戳的導出目錄,並將 SavedModel 寫入其中,其中包含從此會話保存的單個 MetaGraphDef。
導出的 MetaGraphDef 將為從 model_fn 返回的 export_outputs 字典的每個元素提供一個 SignatureDef,使用相同的鍵命名。這些密鑰之一始終是signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY,指示當一個服務請求沒有指定時將提供哪個簽名。對於每個簽名,輸出由相應的ExportOutputs 提供,並且輸入始終是由 serve_input_receiver_fn 提供的輸入接收器。
額外的資產可以通過 extra_assets 參數寫入 SavedModel。這應該是一個 dict,其中每個鍵都給出了相對於 assets.extra 目錄的目標路徑(包括文件名)。相應的值給出要復制的源文件的完整路徑。例如,復制單個文件而不重命名的簡單情況被指定為:{'my_asset_file.txt': '/path/to/my_asset_file.txt'}。
ARGS:
- export_dir_base:一個包含一個目錄的字符串,用於創建包含導出的 SavedModels 的時間戳子目錄。
- serving_input_receiver_fn:一個不帶參數並返回 ServingInputReceiver 的函數。
- assets_extra:指定如何在導出的 SavedModel 中填充 asset.extra 目錄的 dict,如果為 None,則不需要額外的資源。
- as_text:是否以文本格式寫入 SavedModel 原型。
- checkpoint_path:要導出的檢查點路徑。如果為 None(默認值),則選擇在模型目錄中找到的最新檢查點。
返回:
導出目錄的字符串路徑。
注意:
- ValueError:如果沒有提供 serve_input_receiver_fn,則不提供 export_outputs,或者沒有找到任何檢查點。
predict
predict( input_fn, predict_keys=None, hooks=None, checkpoint_path=None )
返回給定功能的預測。
ARGS:
- input_fn:輸入函數返回的特征,是字符串特征名稱字典的 Tensor 或 SparseTensor。如果它返回一個元組,則第一個項目被提取為特征。預測繼續,直到input_fn 引發 end-of-input 異常(OutOfRangeError 或 StopIteration)。
- predict_keys:str 列表,要預測的鍵的名稱。如果 EstimatorSpec.predictions 是 dict,則使用它。如果使用 predict_keys,那么其余的預測將從字典中過濾掉。如果為 None,則返回所有。
- hooks:SessionRunHook 子類實例列表。用於預測調用內的回調。
- checkpoint_path:對具體檢查點的路徑進行預測。如果為 None,則使用 model_dir 中的最新檢查點。
得到:
計算預測張量的值。
注意:
- ValueError:在 model_dir 中找不到訓練有素的模型。
- ValueError:如果批量長度的預測不一致。
- ValueError:如果 predict_keys 和 predictions 之間存在沖突。例如,如果 predict_keys 不是 None,但 EstimatorSpec.predictions 不是 dict。
train
train( input_fn, hooks=None, steps=None, max_steps=None )
訓練一個給定訓練數據 input_fn 的模型。
ARGS:
- input_fn:輸入函數返回一個元組:features - Dictionary 的字符串特征名到 Tensor 或 SparseTensor。labels - Tensor 或帶標簽的張量字典。
- hooks:SessionRunHook 子類實例列表。用於訓練循環內的回調。
- steps:用於訓練模型的步驟數。如果為 None,永遠訓練或訓練直到 input_fn 生成 OutOfRange 或 StopIteration 錯誤。“steps”是逐步進行的。如果你調用兩次 train(steps = 10),那么 train 總共有20步。如果 OutOfRange 或 StopIteration 在中間出現差錯,train將在前20步之前停止。如果您不想增加行為,請設置 max_steps 代替。如果設置,max_steps 必須為 None。
- max_steps:用於 train 模型的總步驟數。如果為 None,永遠訓練或訓練,直到 input_fn 生成 OutOfRange 或 StopIteration 錯誤。如果設置,steps 必須為None。如果 OutOfRange 或者 StopIteration 在中間出現差錯,訓練之前應停止 max_steps 步驟。兩次調用 train (steps=100) 意味着 200次 train 迭代。另一方面,兩個調用 train(max_steps=100)意味着第二次調用將不會執行任何迭代,因為第一次調用完成了所有的100個步驟。
返回:
返回 self,用於鏈接。
注意:
- ValueError:如果兩個 steps 和 max_steps 都不是 None。
- ValueError:如果任一 steps 或是 max_steps <= 0。
tf.estimator.DNNRegressor DNN模型的回歸器
DNNRegressor 類
繼承自: Estimator
定義在:tensorflow/python/estimator/canned/dnn.py。
TensorFlow DNN 模型的回歸器。
例:
sparse_feature_a = sparse_column_with_hash_bucket(...) sparse_feature_b = sparse_column_with_hash_bucket(...) sparse_feature_a_emb = embedding_column(sparse_id_column=sparse_feature_a, ...) sparse_feature_b_emb = embedding_column(sparse_id_column=sparse_feature_b, ...) estimator = DNNRegressor( feature_columns=[sparse_feature_a_emb, sparse_feature_b_emb], hidden_units=[1024, 512, 256]) # Or estimator using the ProximalAdagradOptimizer optimizer with # regularization. estimator = DNNRegressor( feature_columns=[sparse_feature_a_emb, sparse_feature_b_emb], hidden_units=[1024, 512, 256], optimizer=tf.train.ProximalAdagradOptimizer( learning_rate=0.1, l1_regularization_strength=0.001 )) # Input builders def input_fn_train: # returns x, y pass estimator.train(input_fn=input_fn_train, steps=100) def input_fn_eval: # returns x, y pass metrics = estimator.evaluate(input_fn=input_fn_eval, steps=10) def input_fn_predict: # returns x, None pass predictions = estimator.predict(input_fn=input_fn_predict)
輸入的 train 和 evaluate 應具有以下特點,否則將會產生 KeyError:
- 如果 weight_column 不是 None,則具有 key = weight_column 的特征,其值為張量。
- 對於 feature_columns 中的每列:
- 如果列是 _CategoricalColumn,則具有 key=column.name 並且其值是一個 SparseTensor 的特點。
- 如果列是一個 _WeightedCategoricalColumn,則具有兩個特點:第一個是帶有鍵的 ID 列名稱,第二個是具有鍵權重列名稱。這兩個特點的值必須是SparseTensor。
- 如果列是 _DenseColumn,則有特點:key = column.name 並且其值是一個 Tensor。
損失通過使用均方誤差計算。
屬性
- config
- model_dir
- params
方法
__init__
__init__( hidden_units, feature_columns, model_dir=None, label_dimension=1, weight_column=None, optimizer='Adagrad', activation_fn=tf.nn.relu, dropout=None, input_layer_partitioner=None, config=None )
初始化一個 DNNRegressor 實例。
ARGS:
- hidden_units:每層數隱藏單位的 Iterable。所有層都已完全連接。前 [64, 32] 意味第一層數有 64 個節點和第二個層數有 32 個節點。
- feature_columns:包含模型所使用的所有特征列的 iterable(迭代)。集合中的所有項目都必須是從 FeatureColumn 派生的類的實例。
- model_dir:保存模型參數、圖形等的目錄。這也可用於將檢查點從目錄加載到估算器中,以繼續訓練以前保存的模型。
- label_dimension:每個示例的回歸目標數。這是標簽和 logits 張量對象的最后一個維度的大小 (通常, 它們具有形狀 [batch_size, label_dimension])。
- weight_column:通過 tf.feature_column.numeric_column 創建的一個字符串或者 _NumericColumn 用來定義表示權重的特征列。在 train 過程中,它用於降低權重或增加實例。它將乘以例子的損失。如果它是一個字符串,它是用來作為一個鍵從特征提取權重張量;如果是 _NumericColumn,則通過鍵獲取原始張量weight_column.key,然后在其上應用 weight_column.normalizer_fn 以獲得權重張量。
- optimizer:tf.Optimizer 用於訓練模型的實例。默認為 Adagrad 優化器。
- activation_fn:激活函數應用於每個層。如果為 None,將使用 tf.nn.relu。
- dropout:當不是 None 時,我們將放棄一個給定的坐標的概率。
- input_layer_partitioner: 輸入層分區。默認為 min_max_variable_partitioner 與 min_slice_size64 << 20。
- config:RunConfig 對象配置運行時設置。
evaluate
evaluate( input_fn, steps=None, hooks=None, checkpoint_path=None, name=None )
評估給定的評估數據 input_fn 的模型。
對於每個步驟,調用 input_fn,它返回一組數據。評估結束條件:達到 - steps 批處理,或 - input_fn 引發 end-of-input 異常(OutOfRangeError 或 StopIteration)。
ARGS:
- input_fn:輸入函數返回一個元組:features - Dictionary 的字符串特征名到 Tensor 或 SparseTensor。labels - Tensor或帶標簽的張量字典(dict)。
- steps:評估模型的步驟數。如果為 None,直到 input_fn 引發 end-of-input 異常時,評估結束。
- hooks:SessionRunHook 子類實例的列表,用於評估調用中的回調。
- checkpoint_path:要評估的特定檢查點的路徑。如果為 None,則使用 model_dir 中的最新檢查點。
- name:如果用戶需要在不同數據集上運行多個評估,例如培訓數據與測試數據,則設置評估的名稱。不同評估的度量值保存在單獨的文件夾中,並在 tensorboard 中單獨顯示。
返回:
包含 model_fn 按名稱鍵入指定的評估度量的 dict ,以及一個條目 global_step,它包含執行此評估的全局步驟值。
注意:
- ValueError:如果 steps <= 0。
- ValueError:如果沒有 train 模型,即 model_dir,或者給定的 checkpoint_path 是空的。
export_savedmodel
export_savedmodel( export_dir_base, serving_input_receiver_fn, assets_extra=None, as_text=False, checkpoint_path=None )
將推理圖作為 SavedModel 導出到給定的目錄中。
此方法首先調用 serve_input_receiver_fn 來獲取特征 Tensors,然后調用此 Estimator 的 model_fn 以生成基於這些特征的模型圖,從而構建新的圖。它在新的會話中將給定的檢查點(或缺少最新的檢查點)還原到此圖中。最后,它在給定的 export_dir_base 下面創建一個時間戳的導出目錄,並將 SavedModel 寫入其中,其中包含從此會話保存的單個 MetaGraphDef。
導出的 MetaGraphDef 將為從 model_fn 返回的 export_outputs 字典的每個元素提供一個 SignatureDef,使用相同的鍵命名。這些密鑰之一始終是signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY,指示當一個服務請求沒有指定時將提供哪個簽名。對於每個簽名,輸出由相應的ExportOutputs 提供,並且輸入始終是由 serve_input_receiver_fn 提供的輸入接收器。
額外的資產可以通過 extra_assets 參數寫入 SavedModel。這應該是一個 dict,其中每個鍵都給出了相對於 assets.extra 目錄的目標路徑(包括文件名)。相應的值給出要復制的源文件的完整路徑。例如,復制單個文件而不重命名的簡單情況被指定為:{'my_asset_file.txt': '/path/to/my_asset_file.txt'}。
ARGS:
- export_dir_base:一個包含一個目錄的字符串,用於創建包含導出的 SavedModels 的時間戳子目錄。
- serving_input_receiver_fn:一個不帶參數並返回 ServingInputReceiver 的函數。
- assets_extra:指定如何在導出的 SavedModel 中填充 asset.extra 目錄的 dict,如果為 None,則不需要額外的資源。
- as_text:是否以文本格式寫入 SavedModel 原型。
- checkpoint_path:要導出的檢查點路徑。如果為 None(默認值),則選擇在模型目錄中找到的最新檢查點。
返回:
導出目錄的字符串路徑。
注意:
- ValueError:如果沒有提供 serve_input_receiver_fn,則不提供 export_outputs,或者沒有找到任何檢查點。
predict
predict( input_fn, predict_keys=None, hooks=None, checkpoint_path=None )
返回給定功能的預測。
ARGS:
- input_fn:輸入函數返回的特征,是字符串特征名稱字典的 Tensor 或 SparseTensor。如果它返回一個元組,則第一個項目被提取為特征。預測繼續,直到input_fn 引發 end-of-input 異常(OutOfRangeError 或 StopIteration)。
- predict_keys:str 列表,要預測的鍵的名稱。如果 EstimatorSpec.predictions 是 dict,則使用它。如果使用 predict_keys,那么其余的預測將從字典中過濾掉。如果為 None,則返回所有。
- hooks:SessionRunHook 子類實例列表。用於預測調用內的回調。
- checkpoint_path:對具體檢查點的路徑進行預測。如果為 None,則使用 model_dir 中的最新檢查點。
得到:
計算預測張量的值。
注意:
- ValueError:在 model_dir 中找不到訓練有素的模型。
- ValueError:如果批量長度的預測不一致。
- ValueError:如果 predict_keys 和 predictions 之間存在沖突。例如,如果 predict_keys 不是 None,但 EstimatorSpec.predictions 不是 dict。
train
train( input_fn, hooks=None, steps=None, max_steps=None )
訓練一個給定訓練數據 input_fn 的模型。
ARGS:
- input_fn:輸入函數返回一個元組:features - Dictionary 的字符串特征名到 Tensor 或 SparseTensor。labels - Tensor 或帶標簽的張量字典。
- hooks:SessionRunHook 子類實例列表。用於訓練循環內的回調。
- steps:用於訓練模型的步驟數。如果為 None,永遠訓練或訓練直到 input_fn 生成 OutOfRange 或 StopIteration 錯誤。“steps”是逐步進行的。如果你調用兩次 train(steps = 10),那么 train 總共有20步。如果 OutOfRange 或 StopIteration 在中間出現差錯,train將在前20步之前停止。如果您不想增加行為,請設置 max_steps 代替。如果設置,max_steps 必須為 None。
- max_steps:用於 train 模型的總步驟數。如果為 None,永遠訓練或訓練,直到 input_fn 生成 OutOfRange 或 StopIteration 錯誤。如果設置,steps 必須為None。如果 OutOfRange 或者 StopIteration 在中間出現差錯,訓練之前應停止 max_steps 步驟。兩次調用 train (steps=100) 意味着 200次 train 迭代。另一方面,兩個調用 train(max_steps=100)意味着第二次調用將不會執行任何迭代,因為第一次調用完成了所有的100個步驟。
返回:
返回 self,用於鏈接。
注意:
- ValueError:如果兩個 steps 和 max_steps 都不是 None。
- ValueError:如果任一 steps 或是 max_steps <= 0。
參考:
https://www.w3cschool.cn/tensorflow_python/tensorflow_python-61mk2e0b.html