學習筆記TF044:TF.Contrib組件、統計分布、Layer、性能分析器tfprof
TF.Contrib,開源社區貢獻,新功能,內外部測試,根據反饋意見改進性能,改善API友好度,API穩定後,移到TensorFlow核心模塊。生產代碼,以最新官方教程和API指南參考。
統計分布。TF.contrib.ditributions模塊,Bernoulli、Beta、Binomial、Gamma、Ecponential、Normal、Poisson、Uniform等統計分布,統計研究、應用中常用,各種統計、機器學習模型基石,概率模型、圖形模型依賴。
每個不同統計分布不同特征、函數,同樣子類Distribution擴展。Distribution,建立和組織隨機變量、統計分布基礎類。is_continuous表明隨機變量分布是否連續。allow_nan_states表示分布是否接受nan數據。sample()從分布取樣。prob()計算隨機變量密度函數。cdf()求累積分布函數。entropy()、mean()、std()、variance()得到統計分布平均值和方差等特征。自定義統計分布類要實現以上方程。
Gamma分布。contrib.distributions導入Gamma分布,初始化alpha、beta tf.constant,建立Gamma分布。batch_shap().eval()得到每個樣本形狀,get_batch_shape(),tf.TensorShape()。log_pdf()函數,值log轉換概率密度函數。建立多維Gamma分布,傳入多維alpha、beta參數。
Layer模塊。Contrib.layer包含機器學習算法所需各種各樣成份、部件,卷積層、批標準化層、機器學習指票、優化函數、初始器、特征列。
機器學習層。深度學習和計算機視覺二維平均池avg_pool2d。np.random.uniform建立寬高都是3幾張圖片,contrib.layers.avg_pool2d()對圖片快速建立3x3二維平均池,outpu形狀[5,1,1,3],對每個3x3區域取計算平均值。
建立卷積層,contrib.layers.convolution2d()建立32個3x3過濾器卷積層,改stride、padding、activation_fn參數建立不同架構卷積層,使用不同卷咱們層激活函數。contrib.layers自動建立op名字,output.op.name值‘Conv/Relu‘,用了Conv層和ReLU激活函數。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及傳入參數放到agr_scope,避免重復在多個地方傳入。normalizer_fn和normalizer_params,標準化方程及參數。
len(tf.contrib.framework.get_variables(‘Conv/BatchNorm‘))得到第一個Conv/BatchNorm層長度。
完全連接神經網絡層fully_connected()。建立輸入矩陣,fully_connected()建立輸出7個神經單元神經網絡層。tf.name_scope截下來運算放name_scope。fully_connected()傳入scope。"fe/fc"層別號。傳入outputs_collections,直接得到層輸出。
repeat()重復用同樣參數重復建立某個層。stack()用不同參數建立多個fully_connected()層。conv2d_transpose、conv2d_in_plane、separable_conv2d,參考官方文檔。
損失函數。tf.contrib.losses模塊,各種常用損失函數,二類分類、多類分類、回歸模型等機器學習算法。
絕對差值。tf.constant建立predictions、targets數列。同樣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結合使用,建立最適合自己數據的模型。
數據連續特征(continuous Feature)、類別特征(Categorical Feature)。連續數值特征稱連續特征,可直接用在模型裏。不連續類別特征,需要數值化,轉換為一系列數值代表每個不同類別。learn.datasets API讀入數據。
layers.FeatureColumn API定義特征列。real_valued_column()定義連續特征。
sparse_column_with_keys()處理類別特征,事先知道特征所有可能值。不知道所有可能值,用sparse_column_with_hash_bucket()轉為特征列,哈希表。SparseColumn,直接在TF.Learn傳入Estimator。
數據科學應用,連續特征可能需要被離散化,形成新類別特征,更好代表特征和目標分類類別之間關系。bucketized_column()將SparseColumn區間化。
部分應用,多個特征綜合、交互與目標分類類別關系更緊密。多個特征相關,特征交互能建立更有效模型。crossed_column()建立交叉特征列。
特征列傳入TF.Learn Estimator。fit()、predict()訓練、評估模型。
取部分特征加權求和作新特征列,weighted_sum_from_feature_columns()實現。
Embeddings,嵌入向量。稀疏、高維類別特征向量,轉換低維、稠密實數值向量,和連續特征向量聯合,一起輸入神經網絡模型訓練和優化損失函數。大部分文本識別,先將文本轉換成嵌入向量。
contrib.layers模塊 embedding_column()迅速把高維稀疏類別特征向量轉為想要維數的嵌入向量。特征交互矩陣比較稀疏,級別比較高,轉換後可以使模型更具有概括性更有效。傳入TF.Learn Extimator進行模型建立、訓練、評估。embedding_columns傳入DNNLinearCombinedClassifier深度神經網絡特征列。
許多實際稀疏高維數據,通常有空特征及無效ID,safe_enbedding_lookup_sparse()安全建立嵌入向量。tf.SparseTensor建立稀疏ID和稀疏權重。建立嵌入向量權重embedding_weights,取決詞匯量大小、嵌入同量維數、shard數量。initializer.run()、eval()初始化嵌入向量權重。safe_embedding_lookup_sparse()將原來特征向量安全轉換為低維、稠密特征向量。eval()收集到一個tuple。
性能分析器tfprof。分析模型架構、衡量系統性能。衡量模型參數、浮點運算、op執行時間、要求存儲大小、探索模型結構。
命令安裝tfprof命令行工具。bazel build -c opt tensorflow/contrib/trprof/...。
查詢幫助文件。bazel-bin/tensorflow/contrib/tfprof/tools/tfprof/tfprof help。
執行互動模式,指定graph_path分析模型shape、參數。bazel-bin/tensorflow/contrib/tfprof/tools/tfprof/tfprof \--graph_path=graph.pbtxt。
graph_path、checkpoint_path查看checkpoint Tensor數據和對應值。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文本文件,用來在內存建立模型代表。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命令按回車,進入互動模式,再按回車看到命令行參數默認值。
調節參數,show_name_regexes查找符合正則式條件的scope名字。
tfprof提供兩種類型分析:scope、graph。graph,查看op在graph裏所花內存、時間。
參考資料:
《TensorFlow實戰》
歡迎付費咨詢(150元每小時),我的微信:qingxingfengzi
學習筆記TF044:TF.Contrib組件、統計分布、Layer、性能分析器tfprof