1. 程式人生 > >學習筆記TF047:PlayGround、TensorBoard

學習筆記TF047:PlayGround、TensorBoard

under hist ice 圖像 推薦 generate c++ 技術 pla

PlayGround。http://playground.tensorflow.org 。教學目的簡單神經網絡在線演示、實驗圖形化平臺。可視化神經網絡訓練過程。在瀏覽器訓練神經網絡。界面,數據(DATA)、特征(FEATURES)、神經網絡隱藏層(HIDDEN LAYERS)、層中連接線、輸出(OUTPUT)。

數據。二維平面,藍色正值,黃色負值。數據形態,圓形、異或、高斯、螺旋。數據配置,調整噪聲(noise)大小,改變訓練、測試數據比例(ratio),調整入輸入每批(batch)數據數量1-30。

特征。特征提取(feature extraction)。每個點有X1?X2兩個特征。衍生其他特征,X1X1?X2X2?X1X2?sin(X1)、sin(X2)。X1左邊黃色是負,右邊藍色是正,表示橫坐標值。X2上邊藍色是正,下邊黃色是負,表示縱坐標值。X1X1橫坐標拋物線信息。X2X2縱坐標拋物線信息。X1X2雙曲拋物面信息。sin(X1)橫坐標正弦函數信息。sin(X2)縱坐標正弦函數信息。分類器(classifier)結合特征,畫出線,把原始顏色數據分開。

隱藏層。設置隱藏層數量、每個隱藏層神經元數量。隱藏層間連接線表示權重(weight),藍色表示神經元原始輸出,淺色表示神經元負輸出。連接線粗細、深淺表示權重絕對值大小。鼠標放線上可以看到具體值,修改值。修改值要考慮激活函數。Sigmoid,沒有負向黃色區域,值域(0,1)。下層神經網絡神經元對上層輸出再組合。根據上次預測準確性,反向傳播每個組合不同權重。組合連接線粗細深淺變化。越深越粗,權重越大。

輸出。黃色點歸於黃色背景,藍色點歸於藍色背景。背景顏色深淺代表可能性強弱。選定螺旋形數據,7個特征全部輸入,3個隱藏層,第一層8個神經元,第二層4個神經元,第三層2個神經元。訓練2分鐘,測試損失(test loss)和訓練損失(training loss)不再下降。只輸入最基本前4特征,6個隱藏層,前4層8個神經元,第五層6個神經元,第六層2個神經元。增加神經元個數和神經網絡層數。

TensorBoard。TensorFlow自帶可視化工具,Web應用程序套件。7種可視化,SCALARS(訓練過程準確率、損失值、權重/偏置變化)、IMAGES(訓練過程記錄圖像)、AUDIO(訓練過程記錄音頻)、GRAPHS(模型數據流圖、各設備消耗內存時間)、DISTRIBUTIONS(訓練過程記數據分布圖)、HISTOGRAMS(訓練過程記錄數據柱狀圖)、EMBEDDINGS(展示詞向量投影分布)。

運行本地服務器,監聽6006端口。瀏覽器發出請求,分析訓練記錄數據,繪制訓練過程圖像。運行手寫數字識別入門例子。python tensorflow-1.1.0/tensorflow/examples/tutorials/mnist/mnist/mnist_with_summaries.py 。打開TensorBoard面板。tensorboard -logdir=/tmp/mnist/logs/mnist_with_summaries 。瀏覽器找開網址,查看面板各項功能。

SCALARS面板。左邊,Split on undercores(用下劃線分開顯示)、Data downloadlinks(數據下載鏈接)、Smoothing(圖像曲線平滑程度)、Horizontal Axis(水平軸)。水平軸3種,STEP叠代次數,RELATIVE訓練集測試集相對值,WALL時間。右邊,準確率、交叉熵損失函數值變化曲線(叠代次數1000次)。每層偏置(biases)、權重(weights)變化曲線,每次叠代最大值、最小值、平均值、標準差。

IMAGES面板。訓練數據集、測試集預處理後圖片。

AUDIO面板。訓練過程處理音頻數據。

GRAPHS面板。數據流圖。節點間連線為數據流,連線越粗,兩個節點間流動張量(tensor)越多。左邊,選擇叠代步驟。不同Color(顏色)不同Structure(整個數據流圖結構),不同Color不同Device(設備)。選擇特定叠代step899,顯示各個節點Compute time(計算時間)、Memory(內存消耗)。

DISTRIBUTIONS面板。平面表示特定層激活前後、權重、偏置分布。

HISTOGRAMS面板。立體表示特定層激活前後、權重、偏置分布。

EMBEDDINGS面板。詞嵌入投影。

詞嵌入(word embedding),自然語言處理,推薦系統。Word2vec。TensorFlow Word2vec basic版、optimised版。

降維分析。代碼 https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/tutorials/word2vec/word2vec_basic.py 。Word2vec訓練數據集text8 http://mattmahoney.net/dc/textdata 。只包含a~z字符和空格,27種字符。Skip-gram模型,根據目標詞匯預測上下文。給定n個詞圍繞詞w,w預測一個句子中一個缺漏詞c,概率p(c|w)表示。生成t-SNE降給呈現詞匯接近程度關系。

word2vec_basic.py。
下載文件讀取數據,read_data函數,讀取輸入數據。輸出list,每項一詞。
建立詞匯字典,對應詞、編碼。dictionary存儲詞、編碼。reverse_dictionary是反過來的dictionary 編碼、詞。data是詞list對應詞編碼上一步詞list轉編碼。count存詞匯、詞頻,重復數量少於49999,用‘UNK‘表示稀有詞。
產生一個批次(batch)訓練數據。定義generate_batch函數,輸入batch_size、num_skip、skip_window,batch_size是每個batch大小,num_skips樣本源端考慮次數,skip_window左右考慮詞數,skip_window*2=num_skips。返回batch、label。batch形狀[batch_size],label形狀[batch_size,1],一個中心詞預測周邊詞。
構建、訓練模型。Skip-gram模型。
t-SNE降維呈現。Matplotlib繪制出圖形。

t-SNE。流形學習(manifold Learning)。假設數據均勻采樣於一個高維空間低維流形。流形學習,找到高維空間低維流形,求相慶嵌入映射,實現維數約簡或數據可視化。線性流形學習如主成份分析(PCA),非線性流形學習如特距特征映射(Isomap)、拉普拉斯特征映射(Laplacian eigenmaps,LE)、局部線性嵌入(Locally-linear embedding,LLE)。

嵌入投影。EMBEDDINGS面板,交互式可視化、分析高維數據。例子 https://github.com/tensorflow/models/blob/master/tutorials/embedding/word2vec_optimized.py 。

定義操作(operator,OP),SkipgramWord2vec、NegTrainWord2vec。操作先編譯,執行。TF_INC=$(python -c ‘import tensorflow as tf;print(tf.sysconfig.get_include())‘) 。g++ -std=c++11 -shared word2vec_ops.cc word2vec_kernels.cc -o word2vec_ops.so -fPIC -I $TF_INC -O2 -D_GLIBCXX_USE_CXX11_ABI=0 。當前目錄下生成word2vec_ops.so文件,執行word2vec_optimized.py,生成模型、日誌文件,位於/tmp/,執行tensorboard --logdir=/tmp/ 。訪問瀏覽器。

EMBEDDINGS面板左邊工具欄,降維方式T-SNE、PCA、CUSTOM,二維、三維圖像切換。t-SNE降維工具,手動調整Dimension(困惑度)、Learnign rate(學習率),生成10000個點分布。右邊,正則表達式匹配詞,詞間余弦距離、歐式距離關系。任意選擇一個點,選擇“isolate 101 points”按鈕,展示100個空間上最近被選擇點詞,詞數量。

參考資料:
《TensorFlow技術解析與實戰》

歡迎付費咨詢(150元每小時),我的微信:qingxingfengzi

學習筆記TF047:PlayGround、TensorBoard