在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>數(shù)值算法/人工智能>

TensorFlow模型介紹

大小:0.6 MB 人氣: 2017-09-28 需要積分:2

  模型定義

  定義wide and deep模型是比較簡單的,tutorial中提供了比較完整的模型構(gòu)建實例:

  獲取輸入

  模型的輸入是一個python的dataframe。如tutorial的實例代碼,可以通過pandas.read_csv從CSV文件中讀入數(shù)據(jù)構(gòu)建data frame。

  定義feature columns

  tf.contrib.layers中提供了一系列的函數(shù)定義不同類型的feature columns:

  tf.contrib.layers.sparse_column_with_XXX構(gòu)建低維離散特征

  sparse_feature_a = sparse_column_with_hash_bucket(…)

  sparse_feature_b = sparse_column_with_hash_bucket(…)

  tf.contrib.layers.crossed_column構(gòu)建離散特征的組合

  sparse_feature_a_x_sparse_feature_b = crossed_column([sparse_feature_a, sparse_feature_b], …)

  tf.contrib.layers.real_valued_column構(gòu)建連續(xù)型實數(shù)特征

  real_feature_a = real_valued_column(…)

  tf.contrib.layers.embedding_column構(gòu)建embedding特征

  sparse_feature_a_emb = embedding_column(sparse_id_column=sparse_feature_a, )

  定義模型

  定義分類模型:

  m = tf.contrib.learn.DNNLinearCombinedClassifier( n_classes = n_classes, // 分類數(shù)目 weight_column_name = weight_column_name, // 訓(xùn)練實例的權(quán)重 model_dir = model_dir, // 模型目錄 linear_feature_columns = wide_columns, // 輸入線性模型的feature columns linear_optimizer = tf.train.FtrlOptimizer( 。。.), // 線性模型權(quán)重更新的optimizer dnn_feature_columns = deep_columns, // 輸入DNN模型的feature columns dnn_hidden_units=[ 100, 50], // DNN模型的隱藏層單元數(shù)目 dnn_optimizer=tf.train.AdagradOptimizer( 。。.) // DNN模型權(quán)重更新的optimizer )

  需要指出的是:模型的model_dir同下面會提到的export模型的目錄是2個不同的目錄,model_dir存放模型的graph和summary數(shù)據(jù),如果model_dir存放了上一次訓(xùn)練的模型數(shù)據(jù),訓(xùn)練時會從model_dir恢復(fù)上一次訓(xùn)練的模型并在此基礎(chǔ)上進行訓(xùn)練。我們用tensorboard加載顯示的模型數(shù)據(jù)也是從該目錄下生成的。模型export的目錄則主要是用于tensorflow server啟動時加載模型的servable實例,用于線上預(yù)測服務(wù)。

  如果要使用回歸模型,可以如下定義:

  m = tf.contrib.learn.DNNLinearCombinedRegressor( weight_column_name = weight_column_name, linear_feature_columns = wide_columns, linear_optimizer = tf.train.FtrlOptimizer( 。。.), dnn_feature_columns = deep_columns, dnn_hidden_units=[ 100,50], dnn_optimizer=tf.train.AdagradOptimizer( 。。.) ) 訓(xùn)練評測

  訓(xùn)練模型可以使用fit函數(shù):m.fit(input_fn=input_fn(df_train)),評測使用evaluate函數(shù):m.evaluate(input_fn=input_fn(df_test))。Input_fn函數(shù)定義如何從輸入的dataframe構(gòu)建特征和標(biāo)記:

  def input_fn(df) // tf.constant構(gòu)建constant tensor,df[k].values是對應(yīng)feature column的值構(gòu)成的listcontinuous_cols = {k: tf.constant(df[k].values) fork inCONTINUOUS_COLUMNS} // tf.SparseTensor構(gòu)建sparse tensor,SparseTensor由indices,values, dense_shape三// 個dense tensor構(gòu)成,indices中記錄非零元素在sparse tensor的位置,values是// indices中每個位置的元素的值,dense_shape指定sparse tensor中每個維度的大小// 以下代碼為每個category column構(gòu)建一個[df[k].size,1]的二維的SparseTensor。categorical_cols = { k: tf.SparseTensor( indices=[[i, 0] fori inrange(df[k]。 size)], values=df[k].values, dense_shape=[df[k]。 size, 1]) fork inCATEGORICAL_COLUMNS } // 可以用以下示意圖來表示以上代碼構(gòu)建的sparse tensor// label是一個 constanttensor,記錄每個實例的labellabel= tf. constant(df[LABEL_COLUMN].values) // features是continuous_cols和categorical_cols的union構(gòu)成的dict // dict中每個entry的key是feature column的name,value是feature column值的tensor returnfeatures, label輸出

  模型通過export輸出到一個指定目錄,tensorflow serving從該目錄加載模型提供在線預(yù)測服務(wù):m.export(export_dir=export_dir,input_fn = export._default_input_fn

  use_deprecated_input_fn=True,signature_fn=signature_fn)

  input_fn函數(shù)定義生成模型servable實例的特征,signature_fn函數(shù)定義模型輸入輸出的signature。

  由于在tensorflow1.0之后export已經(jīng)deprecate,需要用export_savedmodel來替代,所以本文就不對export進行更多講解,只在文末給出我們是如何使用它的,建議所有使用者以后切換到最新的API

  模型詳解

  wide and deep模型是基于TF.learn API來實現(xiàn)的,其源代碼實現(xiàn)主要在tensorflow.contrib.learn.python.learn.estimators中。以分類模型為例,wide與deep結(jié)合的分類模型對應(yīng)的類是DNNLinearCombinedClassifier,實現(xiàn)在源文件dnn_linear_combined.py。 我們先看看DNNLinearCombinedClassifier的初始化函數(shù)的完整定義,看構(gòu)造一個wide and deep模型可以輸入哪些參數(shù)

  def __init__( self, model_dir =None, n_classes =2, weight_column_name =None, linear_feature_columns =None, linear_optimizer =None, joint_linear_weights =False, dnn_feature_columns =None, dnn_optimizer =None, dnn_hidden_units =None, dnn_activation_fn =nn .relu, dnn_dropout =None, gradient_clip_norm =None, enable_centered_bias =False, config =None, feature_engineering_fn =None, embedding_lr_multipliers =None):

  我們可以將類的構(gòu)造函數(shù)中的參數(shù)分為以下幾組

  基礎(chǔ)參數(shù)

  model_dir

  我們訓(xùn)練的模型存放到model_dir指定的目錄中。如果我們需要用tensorboard來DEBUG模型,將tensorboard的logdir指向該目錄即可:tensorboard –logdir=$model_dir

  n_classes

  分類數(shù)。默認(rèn)是二分類,》2則進行多分類。

  weight_column_name

  定義每個訓(xùn)練樣本的權(quán)重。訓(xùn)練時每個訓(xùn)練樣本的訓(xùn)練誤差乘以該樣本的權(quán)重然后用于權(quán)重更新梯度的計算。如果需要為每個樣本指定權(quán)重,input_fn返回的features里需要包含一個以weight_column_name為列名的列,該列的長度為訓(xùn)練樣本的數(shù)目,列中每個元素對應(yīng)一個樣本的權(quán)重,數(shù)據(jù)類型是float,如以下偽代碼:

  weight = tf .constant(df[WEIGHT_COLUMN_NAME] .values, dtype=float32);features[weight_column_name] = weight

  config

  指定運行時配置參數(shù)

  eature_engineering_fn

  對輸入函數(shù)input_fn輸出的(features, label)進行后處理生成新的(features’, label’)然后輸入給模型訓(xùn)練函數(shù)model_fn使用。

  call_model_fn(): feature, labels = self._feature_engineering_fn(feature, labels) 線性模型相關(guān)參數(shù)

  linear_feature_columns

  線性模型的輸入特征

  linear_optimizer

  線性模型的優(yōu)化函數(shù),定義權(quán)重的梯度更新算法,默認(rèn)采用FTRL。所有默認(rèn)支持的linear_optimizer和dnn_optimizer可以在optimizer.py的OPTIMIZER_CLS_NAMES變量中找到相關(guān)定義。

  join_linear_weights

  按照代碼中的注釋,如果join_linear_weights= true, 線性模型的權(quán)重會存放在一個tf.Variable中,可以加快訓(xùn)練,但是linear_feature_columns中的特征列必須都是sparse feature column并且每個feature column的combiner必須是“sum”。經(jīng)過自己線下的對比試驗,對模型的預(yù)測能力似乎沒有太大影響,對訓(xùn)練速度有所提升,最終訓(xùn)練模型時我們保持了默認(rèn)值。

  DNN模型相關(guān)參數(shù)

  dnn_feature_columns

  DNN模型的輸入特征

  dnn_optimizer

  DNN模型的優(yōu)化函數(shù),定義各層權(quán)重的梯度更新算法,默認(rèn)采用Adagrad。

  dnn_hidden_units

  每個隱藏層的神經(jīng)元數(shù)目

  dnn_activation_fn

  隱藏層的激活函數(shù),默認(rèn)采用RELU

  dnn_dropout

  模型訓(xùn)練中隱藏層單元的drop_out比例

  gradient_clip_norm

  定義gradient clipping,對梯度的變化范圍做出限制,防止gradient vanishing 或gradient explosion。wide and deep中默認(rèn)采用tf.clip_by_global_norm。

  embedding_lr_multipliers

  embedding_feature_column到float的一個mapping。對指定的embedding feature column在計算梯度時乘以一個常數(shù)因子,調(diào)整梯度的變化速率。

  看完模型的構(gòu)造函數(shù)后,我們大概知道wide和deep端的模型各對應(yīng)什么樣的模型,模型需要輸入什么樣的參數(shù)。為了更深入了解模型,以下我們對wide and deep模型的相關(guān)代碼進行了分析,力求解決如下疑問: (1) 分別用于線性模型和DNN模型訓(xùn)練的特征是如何定義的,其內(nèi)部如何實現(xiàn);(2) 訓(xùn)練中線性模型和DNN模型如何進行聯(lián)合訓(xùn)練,訓(xùn)練誤差如何反饋給wide模型和deep模型?下面我們重點針對特征和模型訓(xùn)練這兩方面進行解讀。

  特征

  wide and deep模型訓(xùn)練一般是以多個訓(xùn)練樣本作為1個批次(batch)進行訓(xùn)練,訓(xùn)練樣本在行維度上定義,每一行對應(yīng)一個訓(xùn)練樣本實例,包括特征(feature column),標(biāo)注(label)以及權(quán)重(weight),如圖2。特征在列維度上定義,每個特征對應(yīng)1個feature column,feature column由在列維度上的1個或者若干個張量(tensor)組成,tensor中的每個元素對應(yīng)一個樣本在該feature column上某個維度的值。feature column的定義在可以在源代碼的feature_column.py文件中找到,對應(yīng)類為_FeatureColumn,該類定義了基本接口,是wide and deep模型中所有特征類的抽象父類。

  TensorFlow模型介紹

  wide and deep模型中使用的特征包括兩大類: 一類是連續(xù)型特征,主要用于deep模型的訓(xùn)練,包括real value類型的特征以及embedding類型的特征等;一類是離散型特征,主要用于wide模型的訓(xùn)練,包括sparse類型的特征以及cross類型的特征等。

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關(guān)規(guī)定!

      ?
      主站蜘蛛池模板: 可以免费播放的在线视频 | 欧美色爱综合 | 一区精品视频 | 1024毛片| 日本午夜视频 | 九九草在线观看 | 亚洲另类电击调教在线观看 | 精品久草 | 网站在线观看你懂的 | 97人人做人人添人人爱 | 日韩欧美一区二区三区不卡视频 | 欧美成人区 | 久久是精品 | 久久久久久国产精品免费 | 日木69xxxhd | 国产三级精品最新在线 | 大量喷潮free | 天堂中文字幕在线 | 夜夜狠 | 放荡女同老师和女同学生 | 免费看片aⅴ免费大片 | 人人天天爱天天做天天摸 | 在线观看黄色网 | 午夜黄色 | 亚洲综合精品一区二区三区中文 | 久久精品99 | 国内一级特黄女人精品毛片 | 一区在线观看视频 | 狠狠色综合久久久久尤物 | 色多多视频在线观看免费大全 | 中国高清性色生活片 | 黄网页在线观看 | 手机看片日韩永久福利盒子 | 欧美伊久线香蕉线新在线 | 三级在线观看免播放网站 | 主人扒开腿揉捏花蒂调教cfh | 欧亚精品卡一卡二卡三 | 迅雷www天堂在线资源 | 美女下面小内内的沟 | 在线a亚洲老鸭窝天堂新地址 | 久久婷婷婷 |