TF.Contrib,開源社區(qū)貢獻砚哗,新功能龙助,內(nèi)外部測試,根據(jù)反饋意見改進性能蛛芥,改善API友好度提鸟,API穩(wěn)定后,移到TensorFlow核心模塊仅淑。生產(chǎn)代碼称勋,以最新官方教程和API指南參考。
統(tǒng)計分布涯竟。TF.contrib.ditributions模塊赡鲜,Bernoulli、Beta庐船、Binomial银酬、Gamma筐钟、Ecponential揩瞪、Normal、Poisson篓冲、Uniform等統(tǒng)計分布李破,統(tǒng)計研究宠哄、應用中常用,各種統(tǒng)計嗤攻、機器學習模型基石琳拨,概率模型、圖形模型依賴屯曹。
每個不同統(tǒng)計分布不同特征狱庇、函數(shù),同樣子類Distribution擴展恶耽。Distribution密任,建立和組織隨機變量、統(tǒng)計分布基礎類偷俭。is_continuous表明隨機變量分布是否連續(xù)浪讳。allow_nan_states表示分布是否接受nan數(shù)據(jù)。sample()從分布取樣涌萤。prob()計算隨機變量密度函數(shù)淹遵。cdf()求累積分布函數(shù)。entropy()负溪、mean()透揣、std()、variance()得到統(tǒng)計分布平均值和方差等特征川抡。自定義統(tǒng)計分布類要實現(xiàn)以上方程辐真。
Gamma分布。contrib.distributions導入Gamma分布崖堤,初始化alpha侍咱、beta tf.constant,建立Gamma分布密幔。batch_shap().eval()得到每個樣本形狀楔脯,get_batch_shape(),tf.TensorShape()胯甩。log_pdf()函數(shù)昧廷,值log轉換概率密度函數(shù)。建立多維Gamma分布蜡豹,傳入多維alpha麸粮、beta參數(shù)。
Layer模塊镜廉。Contrib.layer包含機器學習算法所需各種各樣成份弄诲、部件,卷積層、批標準化層齐遵、機器學習指票寂玲、優(yōu)化函數(shù)、初始器梗摇、特征列拓哟。
機器學習層。深度學習和計算機視覺二維平均池avg_pool2d伶授。np.random.uniform建立寬高都是3幾張圖片断序,contrib.layers.avg_pool2d()對圖片快速建立3x3二維平均池,outpu形狀[5,1,1,3]糜烹,對每個3x3區(qū)域取計算平均值违诗。
建立卷積層,contrib.layers.convolution2d()建立32個3x3過濾器卷積層疮蹦,改stride诸迟、padding、activation_fn參數(shù)建立不同架構卷積層愕乎,使用不同卷咱們層激活函數(shù)阵苇。contrib.layers自動建立op名字,output.op.name值'Conv/Relu'感论,用了Conv層和ReLU激活函數(shù)绅项。layer有自己對應op名字,每個op空間存儲對應變量笛粘,contrib.framework.get_variables_by_name()得到對應op空間變量值趁怔。get_variables_by_name得到建立卷積層權重湿硝,權重形狀是weights_shape值薪前,[3,3,4,32]。
contrib.framework arg_scope減少代碼重復使用关斜。layers.convolution2d及傳入?yún)?shù)放到agr_scope示括,避免重復在多個地方傳入。normalizer_fn和normalizer_params痢畜,標準化方程及參數(shù)垛膝。
len(tf.contrib.framework.get_variables('Conv/BatchNorm'))得到第一個Conv/BatchNorm層長度。
完全連接神經(jīng)網(wǎng)絡層fully_connected()丁稀。建立輸入矩陣吼拥,fully_connected()建立輸出7個神經(jīng)單元神經(jīng)網(wǎng)絡層。tf.name_scope截下來運算放name_scope线衫。fully_connected()傳入scope凿可。"fe/fc"層別號。傳入outputs_collections,直接得到層輸出枯跑。
repeat()重復用同樣參數(shù)重復建立某個層惨驶。stack()用不同參數(shù)建立多個fully_connected()層。conv2d_transpose敛助、conv2d_in_plane粗卜、separable_conv2d,參考官方文檔纳击。
損失函數(shù)续扔。tf.contrib.losses模塊,各種常用損失函數(shù)焕数,二類分類测砂、多類分類、回歸模型等機器學習算法百匆。
絕對差值砌些。tf.constant建立predictions、targets數(shù)列加匈。同樣shape存璃。選擇性建立權重。losses.absolute_difference()計算預測損失值雕拼。
計算softmax交叉熵纵东。多類分類機器學習模型。建立predictions啥寇、labels偎球,多給。losses.softmax_cross_entropy()計算預測softmax交叉熵值辑甜。loss.eval()運行衰絮。loss.op.name得到TensorFlow自動賦值op名字,'softmax_cross_entropy_loss/value'磷醋。softmax_cross_entropy() label_smoothing平滑所有標識猫牡。
應用大部分分布稀疏,sparse_softmax_cross_entropy()提升計算效率邓线。
特征列 Feature Column淌友。tf.contrib.layers高階特征列(Feature Column)API,和TF.Learn API結合使用,建立最適合自己數(shù)據(jù)的模型骇陈。
數(shù)據(jù)連續(xù)特征(continuous Feature)震庭、類別特征(Categorical Feature)。連續(xù)數(shù)值特征稱連續(xù)特征你雌,可直接用在模型里器联。不連續(xù)類別特征,需要數(shù)值化,轉換為一系列數(shù)值代表每個不同類別主籍。learn.datasets API讀入數(shù)據(jù)习贫。
layers.FeatureColumn API定義特征列。real_valued_column()定義連續(xù)特征千元。
sparse_column_with_keys()處理類別特征苫昌,事先知道特征所有可能值。不知道所有可能值幸海,用sparse_column_with_hash_bucket()轉為特征列祟身,哈希表。SparseColumn物独,直接在TF.Learn傳入Estimator袜硫。
數(shù)據(jù)科學應用,連續(xù)特征可能需要被離散化挡篓,形成新類別特征婉陷,更好代表特征和目標分類類別之間關系。bucketized_column()將SparseColumn區(qū)間化官研。
部分應用秽澳,多個特征綜合、交互與目標分類類別關系更緊密戏羽。多個特征相關担神,特征交互能建立更有效模型。crossed_column()建立交叉特征列始花。
特征列傳入TF.Learn Estimator妄讯。fit()、predict()訓練酷宵、評估模型亥贸。
取部分特征加權求和作新特征列,weighted_sum_from_feature_columns()實現(xiàn)忧吟。
Embeddings砌函,嵌入向量。稀疏溜族、高維類別特征向量,轉換低維垦沉、稠密實數(shù)值向量煌抒,和連續(xù)特征向量聯(lián)合,一起輸入神經(jīng)網(wǎng)絡模型訓練和優(yōu)化損失函數(shù)厕倍。大部分文本識別寡壮,先將文本轉換成嵌入向量。
contrib.layers模塊 embedding_column()迅速把高維稀疏類別特征向量轉為想要維數(shù)的嵌入向量。特征交互矩陣比較稀疏况既,級別比較高这溅,轉換后可以使模型更具有概括性更有效。傳入TF.Learn Extimator進行模型建立棒仍、訓練悲靴、評估。embedding_columns傳入DNNLinearCombinedClassifier深度神經(jīng)網(wǎng)絡特征列莫其。
許多實際稀疏高維數(shù)據(jù)癞尚,通常有空特征及無效ID,safe_enbedding_lookup_sparse()安全建立嵌入向量乱陡。tf.SparseTensor建立稀疏ID和稀疏權重浇揩。建立嵌入向量權重embedding_weights,取決詞匯量大小憨颠、嵌入同量維數(shù)胳徽、shard數(shù)量。initializer.run()爽彤、eval()初始化嵌入向量權重膜廊。safe_embedding_lookup_sparse()將原來特征向量安全轉換為低維、稠密特征向量淫茵。eval()收集到一個tuple爪瓜。
性能分析器tfprof。分析模型架構匙瘪、衡量系統(tǒng)性能铆铆。衡量模型參數(shù)、浮點運算丹喻、op執(zhí)行時間薄货、要求存儲大小、探索模型結構碍论。
命令安裝tfprof命令行工具谅猾。bazel build -c opt tensorflow/contrib/trprof/...。
查詢幫助文件鳍悠。bazel-bin/tensorflow/contrib/tfprof/tools/tfprof/tfprof help税娜。
執(zhí)行互動模式,指定graph_path分析模型shape藏研、參數(shù)敬矩。bazel-bin/tensorflow/contrib/tfprof/tools/tfprof/tfprof --graph_path=graph.pbtxt。
graph_path蠢挡、checkpoint_path查看checkpoint Tensor數(shù)據(jù)和對應值弧岳。bazel-bin/tensorflow/contrib/tfprof/tools/tfprof/tfprof --graph_path=graph.pbtxt --checkpoint_path=model.ckpt凳忙。
提供run_meta_path查看不同op請求存儲、計時禽炬。bazel-bin/tensorflow/contrib/tfprof/tools/tfprof/tfprof --graph_path=graph.pbtxt --fun_meta_path=run_meta --checkpoint_path=model.ckpt涧卵。
graph_path文件是GraphDef文本文件,用來在內(nèi)存建立模型代表腹尖。tf.Supervisor寫graph.pbtxt柳恐。tf.Graph.as_graph_def()或其他類似API存儲模型定義到GraphDef文件。
run_meta_path文件是tensorflow::RunMetadata結果桐臊。得到模型每個op所需存儲和時間消耗胎撤。
checkpoint_path是模型checkpoint包含所有checkpoint變量op類型、shape断凶、值伤提。
op_log_path是tensorflow::tfprof::OpLog結果,包含額外op信息认烁,op組類別名字肿男。
tfprof是CLI命令行工具,輸入tfprof命令按回車却嗡,進入互動模式舶沛,再按回車看到命令行參數(shù)默認值。
調(diào)節(jié)參數(shù)窗价,show_name_regexes查找符合正則式條件的scope名字如庭。
tfprof提供兩種類型分析:scope、graph撼港。graph坪它,查看op在graph里所花內(nèi)存、時間帝牡。
參考資料:
《TensorFlow實戰(zhàn)》
歡迎付費咨詢(150元每小時)往毡,我的微信:qingxingfengzi