TF.Learn,TensorFlow重要模塊识补,各種類型深度學習及流行機器學習算法族淮。TensorFlow官方Scikit Flow項目遷移,谷歌員工Illia Polosukhin、唐源發(fā)起祝辣。Scikit-learn代碼風格贴妻,幫助數(shù)據(jù)科學從業(yè)者更好、更快適應接受TensorFlow代碼蝙斜。囊括許多TensorFlow代碼名惩、設計模式,用戶更快搭建機器學習模型實現(xiàn)應用孕荠。避免大量代碼重復娩鹉,把精力放在搭建更精確模型。與其他contrib模塊無逢結(jié)合岛琼。
分布式Estimator底循。Estimator巢株,各種各樣機器學習槐瑞、深度學習類「蟀可以直接用這些高階類困檩,也可以根據(jù)實際應用需求快速創(chuàng)建子類。graph_actions模塊那槽,Estimator在訓練悼沿、評估模型復雜分布式邏輯被實現(xiàn)、濃縮骚灸,不需要復雜Supervisor糟趾、Coordinator分布式訓練具體實現(xiàn)細節(jié)、邏輯甚牲。
Estimator接受自定義模型义郑,函數(shù)答名(入?yún)⒆侄?>返回字段):(1)(features,targets)->(predictions,loss,train_op)。(2)(features,targets,mode)->(predictions,loss,train_op)丈钙。(3)(features,targets,mode,params)->(predictions,loss,train_op)非驮。
自定義模型接受兩個參數(shù):features和targets。features雏赦,數(shù)據(jù)特征劫笙。targets數(shù)據(jù)特征每行目標或分類標識。tf.one_hot對targets獨熱編碼(One-hot Encoding)星岗。layers.stack疊加多層layers.fully_connected完全連接深度神經(jīng)網(wǎng)絡填大,每層分別10?20?10個隱藏節(jié)點,不同層轉(zhuǎn)換俏橘、訓練栋盹,得到新數(shù)據(jù)特征。models.logistic_regression_zero_init加一層,0初始參數(shù)值邏輯回歸模型例获,得到預測值汉额、損失值。contrib.layers.optimize_loss函數(shù)優(yōu)化損失值榨汤,根據(jù)需要選擇不同優(yōu)化函數(shù)和學習速率蠕搜。optimize_loss訓練算子(Training Operator),每次訓練迭代優(yōu)化模型參數(shù)和決定模型發(fā)展方向收壕。返回預測值妓灌、預測概率,或其中一個蜜宪。
iris數(shù)據(jù)分類虫埂。Scikit-learn datasets引入數(shù)據(jù),cross_validation數(shù)據(jù)分訓練圃验、評估掉伏。my_model放learn.Estimator,Scikit-learn風格fit澳窑、predict函數(shù)斧散。快速定義自己的模型函數(shù)摊聋,直接利用Estimator各種功能鸡捐,直接分布式模型訓練,不用擔心實現(xiàn)細節(jié)麻裁。
模式(Mode)定義函數(shù)箍镜,常用模式training、evaluation煎源、prediction色迂,可以在ModeKeys找到。加條件語句實現(xiàn)復雜邏輯薪夕。params調(diào)節(jié)參數(shù)脚草,fit函數(shù)可以給更多參數(shù)。
建立機器學習Estimator原献。BaseEstimator最抽象最基本實現(xiàn)TensorFlow模型訓練馏慨、評估類。fit()模型訓練姑隅,partial_fit()線上訓練写隶,evaluate()評估模型,predict()使用模型預測新數(shù)據(jù)讲仰。graph_actions復雜邏輯模型訓練慕趴、預測。SuperVisor、Coordinator冕房、QueueRunner躏啰,分布式訓練、預測耙册。learn.DataFeeder给僵、learn.DataFrame類自動識別、處理详拙、迭代不同類型數(shù)據(jù)帝际。estimators.tensor_signature對數(shù)據(jù)進行兼容性判斷(稀疏張量Sparse Tensor),數(shù)據(jù)讀入更方便饶辙、穩(wěn)定蹲诀。BaseEstimator對learn.monitors及模型存儲進行初始化設置。learn.monitors監(jiān)測模型訓練弃揽。
BaseEstimator脯爪,_get_train_ops()、_get_eval_ops()蹋宦、_get_predict_ops()子類實現(xiàn)披粟。
Estimator咒锻,_get_train_ops()接受features冷冗、targets參數(shù),自定義模型函數(shù)返回Operation惑艇、損失Tensor Tuple蒿辙,在每個訓練迭代優(yōu)化模型參數(shù)。非監(jiān)督學習模型Estimator滨巴,忽略targets思灌。
_get_eval_ops(),BaseEstimator子類自定義metrics評估每個模型訓練迭代恭取。contrib.metrics泰偿。自定義metrics函數(shù)返回一個Tensor對象Python字黃代表評估Operation,每次迭代用到蜈垮。
自定義模型對新數(shù)據(jù)預測耗跛、計算損失值,ModeKeys EVAL表明函數(shù)只在評估用攒发。contrib.metrics模塊调塌,streaming_mean對loss計算平均流,之前計算過平均值加這次迭代損失值再計算平均值惠猿。
_get_predict_ops()實現(xiàn)自定義預測羔砾。對預測結(jié)果進一步處理。預測概率轉(zhuǎn)換簡單預測結(jié)果,概率平滑加工(Smooting)姜凄。函數(shù)返回Tensor對象Python字典代表預測Operation政溃。Estimator predict()函數(shù),Estimator分布式功能态秧。非監(jiān)督模型玩祟,類似Sckkit-learn transform()函數(shù)。
邏輯回歸(LogisticRegressor)屿聋,Estimator提供絕大部分實現(xiàn)空扎,LogisticRegressor只需提供自己的metrics(AUC、accuracy润讥、precision转锈、recall,處理二分類問題)楚殿,快速在LogiticRegressor基礎寫子類實現(xiàn)個性化二分類Estimator撮慨,不需要關心其他邏輯實現(xiàn)。
TF.Learn 隨機森林模型TensorForestEstimator許多細節(jié)實現(xiàn)在contrib.tensor_forest脆粥。只利用砌溺、暴露高階需要用到成分到TensorForestEstimator。超參數(shù)通過contrib.tensor_forest.ForestHParams傳到構造函數(shù)params变隔,構造函數(shù)params.fill()建造隨機森林TensorFlow圖规伐,tensor_forest.RandomForestGraphs。
實現(xiàn)復雜匣缘,需要高效率猖闪,細節(jié)用C++實現(xiàn)單獨Kernel。_get_predict_ops()函數(shù)肌厨,tensor_forest內(nèi)部C++實現(xiàn)data_ops.ParseDataTensorOrDict()函數(shù)檢測培慌、轉(zhuǎn)換讀入數(shù)據(jù)到可支持數(shù)據(jù)類型,RandomForestGraphs inference_graph函數(shù)得到預測Operation柑爸。
_get_train_ops()吵护、_get_eval_ops()函數(shù)分別調(diào)用RandomForestGraphs.trainning_loss()、RandomForestGraphs.onference_graph()函數(shù)表鳍,data_ops.ParseDataTensorOrDict馅而、data_ops.ParseLabelTensorOrDict分別檢測、轉(zhuǎn)換features进胯、targets到兼容數(shù)據(jù)類型用爪。
調(diào)節(jié)RunConfig運行時參數(shù)。RunConfig胁镐,TF.Learn類偎血,調(diào)節(jié)程序運行時參數(shù)诸衔。num_cores選擇使用核數(shù)量,num_ps_replicas調(diào)節(jié)參數(shù)服務器數(shù)量颇玷,gpu_memory_fraction控制使用GPU存儲百分比笨农。
RunConfig master參數(shù),指定訓練模型主服務器地址帖渠,task設置任務ID谒亦,每個任務ID控制一個訓練模型參數(shù)服務器replica。
初始化一個RunConfig對象空郊,傳進Estimator份招。RunConfig參數(shù)默認值在本地運行簡單模型,只用一個任務ID狞甚,80%GPU存儲參數(shù)傳進Estimator锁摔。運行時參數(shù)會自動運用,不用擔心ConfigProto哼审、GPUOptions細節(jié)谐腰。快速改變參數(shù)實現(xiàn)分布式模型訓練涩盾、參數(shù)服務器使用十气。
Experiment,簡單易用建立模型實驗類春霍,建模所需所有信息砸西,Estimator、訓練數(shù)據(jù)终畅、評估數(shù)據(jù)籍胯、平估指標竟闪、監(jiān)督器离福、評估頻率×陡颍可以選擇當?shù)剡\行妖爷,可以和RunConfig配合分布式試驗。LearnRunner理朋,方便做實驗絮识。
tf.app.flags定義可以從命令行傳入?yún)?shù),數(shù)據(jù)嗽上、模型次舌、輸出文件路徑、訓練兽愤、評估步數(shù)彼念。schedule試驗類型挪圾。local_run()當?shù)卦囼灐un_std_server()標準服務器試驗逐沙。master_grpc_url主要GRPC TensorFlow服務器哲思。num_parameter_servers參數(shù)服務器數(shù)量。
建立Experiment對象函數(shù)吩案,F(xiàn)LAGS建立RunConfig棚赔,機器學習模型Estimator,建立廣度深度結(jié)合分類器(DNNLinearCombinedClassifier)徘郭。input_train_fn靠益、input_test_fn,數(shù)據(jù)來源残揉、提供訓練捆毫、評估數(shù)據(jù)。
create_experiment_fn()函數(shù)傳入LearnRunner進行不同類型試驗冲甘,當?shù)丶薄⒎掌髟囼灐T囼灲Y(jié)果存儲到不同路徑江醇。
深度學習Estimator濒憋。TF.Learn包含簡單易用深度神經(jīng)網(wǎng)絡Estimator。分類問題DNNClassifier陶夜。_input_fn()建立數(shù)據(jù)凛驮,layers模塊建立特征列。
特征列条辟、每層隱藏神經(jīng)單元數(shù)黔夭、標識類別數(shù)傳入DNNClassifier,迅速建立深度神經(jīng)網(wǎng)絡模型羽嫡。
fit()本姥、evaluate()方法模型訓練、評估杭棵。
每行數(shù)據(jù)都有權重婚惫。DNNClassfier,指定一列為權重列魂爪,自動分配到訓練過程先舷。四行數(shù)據(jù),每行不同權重滓侍。權重列蒋川、特征列放入features。
DNNClassifier表明權重列列名 w撩笆,特征列列名x(x轉(zhuǎn)換特征列)捺球。
傳入自定義metrics方程_my_metric_op()街图,操作predictions、targets進行metrics計算懒构。只考慮二分類問題餐济,tf.slice()剪切predictions第二列作預測值。
tf.slice()傳入輸入矩陣input胆剧,剪切開始元素begin絮姆,剪切Tensor形狀size,size[i]代表第i個維度想剪切矩陣shape秩霍。
根據(jù)需求任意在predictions篙悯、targets操作實現(xiàn)想要metrics計算,evaluate()傳入metrics函數(shù)铃绒,TF.Learn根據(jù)metrics評估模型鸽照。
evaluate()可以提供多個metrics,_my_metric_op自定義颠悬,tr.contrib自帶矮燎。
optimizer提供自定義函數(shù),定義自己的優(yōu)化函 赔癌,包含指數(shù)遞減學習率诞外。
tf.contrib.framework.get_or_create_global_step()得到目前模型訓練到達全局步數(shù)。tf.train.exponential_decay()對學習率指數(shù)遞減灾票,避免爆炸梯度峡谊。
廣度深度模型,DNNLinearCombinedClassifier刊苍。谷歌廣泛用在各種機器學習應用既们,深度神經(jīng)網(wǎng)絡和邏輯回歸結(jié)合,不同特征通過兩種不同方式結(jié)合正什,更能體現(xiàn)應用意義和更有效推薦結(jié)果啥纸。類似Kaggle競賽Ensemble。
更多參數(shù)埠忘,與DNNClassifier脾拆、LinearClassifier不同特征列選擇。
gender莹妒、education、relationship绰上、workclass轉(zhuǎn)換為FeatureColumn旨怠。分wide_columns、deep_columns蜈块。wide_columns用在LinearClassifier鉴腻,deep_columns用在DNNClassifier迷扇。分別傳入DNNLinearCombinedClassifier建立廣度深度模型。具有線性特征爽哎,也具有深度神經(jīng)網(wǎng)絡特征蜓席。
參考資料:
《TensorFlow實戰(zhàn)》
歡迎付費咨詢(150元每小時),我的微信:qingxingfengzi