DNNLinear組合分類器的使用

2018-09-30 17:41 更新
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 應具有以下特點,否則將會產(chǎn)生 KeyError:

  • 對于 dnn_feature_columns+ linear_feature_columns 中的每一列:
  • 如果列是 _CategoricalColumn,則具有 key=column.name 并且其值是一個 SparseTensor 的特點.
  • 如果列是一個 _WeightedCategoricalColumn,則具有兩個特點:第一個是帶有鍵的 ID 列名稱,第二個是具有鍵權(quán)重列名稱.這兩個特點的值必須是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:保存模型參數(shù)、圖形等的目錄.這也可用于將檢查點從目錄加載到估算器中,以繼續(xù)訓練以前保存的模型.
  • linear_feature_columns:包含模型線性部分使用的所有特征列的 iterable(迭代).集合中的所有項目都必須是從 FeatureColumn 派生的類的實例.
  • linear_optimizer:tf.Optimizer 用于將漸變應用于模型的線性部分的實例.默認為 FTRL 優(yōu)化器.
  • dnn_feature_columns:包含模型深層部分所使用的所有特征列的 iterable.集合中的所有項目都必須是從 FeatureColumn 派生的類的實例.
  • dnn_optimizer:tf.Optimizer 用于將漸變應用于模型的深層部分的實例.默認為 Adagrad 優(yōu)化器.
  • dnn_hidden_units:每層隱藏單位的列表.所有層都完全連接.
  • dnn_activation_fn:激活函數(shù)應用于每個層.如果無,將使用 tf.nn.relu.
  • dnn_dropout:當不是 None 時,我們將放棄一個給定的坐標的概率.
  • n_classes:標簽類的數(shù)量.默認為 2,即二進制分類,必須大于1.
  • weight_column:通過 tf.feature_column.numeric_column 創(chuàng)建的一個字符串或者 _NumericColumn 用來定義表示權(quán)重的特征列.在 train 過程中,它用于降低權(quán)重或增加實例.它將乘以例子的損失.如果它是一個字符串,它是用來作為一個鍵從特征提取權(quán)重張量;如果是 _NumericColumn,則通過鍵獲取原始張量weight_column.key,然后在其上應用 weight_column.normalizer_fn 以獲得權(quán)重張量.
  • label_vocabulary:字符串列表表示可能的標簽值.如果給定,標簽必須是字符串類型,并且在 label_vocabulary 中具有任何值.如果沒有給出,這意味著標簽已經(jīng)被編碼為整數(shù)或者在[0,1]內(nèi)浮動, n_classes=2 ;并且被編碼為{0,1,...,n_classes-1}中的整數(shù)值,n_classes> 2.如果沒有提供詞匯表并且標簽是字符串,也會出現(xiàn)錯誤.
  • input_layer_partitioner:輸入層分區(qū).默認為 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
)

評估給定的評估數(shù)據(jù) input_fn 的模型.

對于每個步驟,調(diào)用 input_fn,它返回一組數(shù)據(jù).評估結(jié)束條件:達到 - steps 批處理,或 - input_fn 引發(fā) end-of-input 異常(OutOfRangeError 或 StopIteration).

ARGS:

  • input_fn:輸入函數(shù)返回一個元組:features - Dictionary 的字符串特征名到 Tensor 或 SparseTensor.labels - Tensor或帶標簽的張量字典(dict).
  • steps:評估模型的步驟數(shù).如果為 None,直到 input_fn 引發(fā) end-of-input 異常時,評估結(jié)束.
  • hooks:SessionRunHook 子類實例的列表,用于評估調(diào)用中的回調(diào).
  • checkpoint_path:要評估的特定檢查點的路徑.如果為 None,則使用 model_dir 中的最新檢查點.
  • name:如果用戶需要在不同數(shù)據(jù)集上運行多個評估,例如培訓數(shù)據(jù)與測試數(shù)據(jù),則設置評估的名稱.不同評估的度量值保存在單獨的文件夾中,并在 tensorboard 中單獨顯示.

返回:

包含 model_fn 按名稱鍵入指定的評估度量的 dict ,以及一個條目 global_step,它包含執(zhí)行此評估的全局步驟值.

注意:

  • 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 導出到給定的目錄中.

此方法首先調(diào)用 serve_input_receiver_fn 來獲取特征 Tensors,然后調(diào)用此 Estimator 的 model_fn 以生成基于這些特征的模型圖,從而構(gòu)建新的圖.它在新的會話中將給定的檢查點(或缺少最新的檢查點)還原到此圖中.最后,它在給定的 export_dir_base 下面創(chuàng)建一個時間戳的導出目錄,并將 SavedModel 寫入其中,其中包含從此會話保存的單個 MetaGraphDef.

導出的 MetaGraphDef 將為從 model_fn 返回的 export_outputs 字典的每個元素提供一個 SignatureDef,使用相同的鍵命名.這些密鑰之一始終是signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY,指示當一個服務請求沒有指定時將提供哪個簽名.對于每個簽名,輸出由相應的ExportOutputs 提供,并且輸入始終是由 serve_input_receiver_fn 提供的輸入接收器.

額外的資產(chǎn)可以通過 extra_assets 參數(shù)寫入 SavedModel.這應該是一個 dict,其中每個鍵都給出了相對于 assets.extra 目錄的目標路徑(包括文件名).相應的值給出要復制的源文件的完整路徑.例如,復制單個文件而不重命名的簡單情況被指定為:{'my_asset_file.txt': '/path/to/my_asset_file.txt'}.

ARGS:

  • export_dir_base:一個包含一個目錄的字符串,用于創(chuàng)建包含導出的 SavedModels 的時間戳子目錄.
  • serving_input_receiver_fn:一個不帶參數(shù)并返回 ServingInputReceiver 的函數(shù).
  • 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:輸入函數(shù)返回的特征,是字符串特征名稱字典的 Tensor 或 SparseTensor.如果它返回一個元組,則第一個項目被提取為特征.預測繼續(xù),直到input_fn 引發(fā) end-of-input 異常(OutOfRangeError 或 StopIteration).
  • predict_keys:str 列表,要預測的鍵的名稱.如果 EstimatorSpec.predictions 是 dict,則使用它.如果使用 predict_keys,那么其余的預測將從字典中過濾掉.如果為 None,則返回所有.
  • hooks:SessionRunHook 子類實例列表.用于預測調(diào)用內(nèi)的回調(diào).
  • 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
)

訓練一個給定訓練數(shù)據(jù) input_fn 的模型.

ARGS:

  • input_fn:輸入函數(shù)返回一個元組:features - Dictionary 的字符串特征名到 Tensor 或 SparseTensor.labels - Tensor 或帶標簽的張量字典.
  • hooks:SessionRunHook 子類實例列表.用于訓練循環(huán)內(nèi)的回調(diào).
  • steps:用于訓練模型的步驟數(shù).如果為 None,永遠訓練或訓練直到 input_fn 生成 OutOfRange 或 StopIteration 錯誤.“steps”是逐步進行的.如果你調(diào)用兩次 train(steps = 10),那么 train 總共有20步.如果 OutOfRange 或 StopIteration 在中間出現(xiàn)差錯,train將在前20步之前停止.如果您不想增加行為,請設置 max_steps 代替.如果設置,max_steps 必須為 None.
  • max_steps:用于 train 模型的總步驟數(shù).如果為 None,永遠訓練或訓練,直到 input_fn 生成 OutOfRange 或 StopIteration 錯誤.如果設置,steps 必須為None.如果 OutOfRange 或者 StopIteration 在中間出現(xiàn)差錯,訓練之前應停止 max_steps 步驟.兩次調(diào)用 train (steps=100) 意味著 200次 train 迭代.另一方面,兩個調(diào)用 train(max_steps=100)意味著第二次調(diào)用將不會執(zhí)行任何迭代,因為第一次調(diào)用完成了所有的100個步驟.

返回:

返回 self,用于鏈接.

注意:

  • ValueError:如果兩個 steps 和 max_steps 都不是 None.
  • ValueError:如果任一 steps 或是 max_steps <= 0.


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號