一驹饺、手寫數(shù)字識別的改進:將識別準確率提高到98%以上
在代碼里
L1_drop = tf.nn.dropout(L1, keep_prob)
這一句報錯ValueError: Shapes (?, 10) and () are incompatible钳枕,可能是定義占位符的時候定義成了:
keep_prob = tf.placeholder(tf.float32, [None,10])
應該定義成:
keep_prob = tf.placeholder(tf.float32)
這時候如果還報錯,可能是后面sess.run的時候沒有給keep_prob賦初始值逻淌。
代碼如下:使用AdamOptimizer么伯。每迭代一次更新學習率。
特點:一開始給予更大的學習率快速收斂卡儒,之后學習率逐漸降低田柔。
結(jié)果如下:可以發(fā)現(xiàn)準確率能達到98%以上。
二骨望、TensorBoard的網(wǎng)絡結(jié)構(gòu)
用tensorboard來畫神經(jīng)網(wǎng)絡的結(jié)構(gòu)硬爆。
需要先定義一個命名空間name_scope。
然后加一句用于創(chuàng)建新文件夾和畫圖:
然后logs文件夾下就會出現(xiàn)一個新的文件擎鸠。
之后在windows下打開Anaconda Prompt缀磕,路徑改到當前磁盤的目錄下,比如"d:"
視頻里說打開命令行劣光,但是我的電腦里打開命令行不承認tensorboard這個命令袜蚕,見下:
在Anaconda Prompt下輸入:"tensorboard --logdir=logs",‘=‘’后面加logs文件夾所在的路徑绢涡,因為本身就在當前文件夾下牲剃,所以直接輸入logs就可以了。
復制最下面一行的網(wǎng)址雄可,粘貼到谷歌瀏覽器內(nèi)凿傅,就可以看到圖了缠犀。
TensorBoard的具體操作:鼠標左鍵移動,滾輪放大聪舒,雙擊展開辨液。
一些namespace可以右鍵并且點“remove from the graph”或者點“add to the graph”移動到右邊或者移動到圖內(nèi)。
然后點擊namespace旁邊的+號或者雙擊namespace查看具體內(nèi)容:輸入輸出箱残。
圖例如下:
繼續(xù)定義一個命令空間:
刪除上一個圖滔迈,再運行一次,然后在命令行里輸入兩次“ctrl+c”疚宇,再執(zhí)行一次tensorboard的命令亡鼠。然后在網(wǎng)址里刷新。此時刷新會發(fā)現(xiàn)前后兩個圖混在了一起敷待。
在Jupyter中點Kernel+Restart+run all间涵,再次刷新圖匹中,以防止出現(xiàn)兩個圖混疊的情況牌里。
完整代碼如下:
TensorBoard生成的圖如下:
從圖上可以看出代碼的結(jié)構(gòu)。
三褒繁、TensorBoard網(wǎng)絡運行(可視化參數(shù))
tf.summary.scalar('mean',mean)
#這個方法是給mean這個變量命名為'mean'
tf.summary.histogram('histogram',var) #直方圖
write.add_summary(summary,epoch)? ?#?寫入summary和文件運行周期
詳細代碼截圖如下:(在Pycharm上可以跑举哟,在Jupyter上有報錯沒有y-input思劳,但是明明是有的...)
出來的圖在TensorBoard的Scalar標簽欄下:
點擊Accuracy就可以看到圖了:
可以放大(圖像下方),也可以進行Smoothing(界面左側(cè))妨猩。
記錄了Weight和biases的平均值潜叛,標準差,最小值壶硅,方差等隨迭代次數(shù)的變化威兜,并記錄了loss隨迭代次數(shù)的變化。
loss隨著迭代次數(shù)增加而震蕩著降低庐椒。如果loss曲線震動得比較劇烈椒舵,可能因為學習率設置得太大了,導致模型沒法收斂约谈。
點擊網(wǎng)頁上方的“distribution”按鈕笔宿,可以看到直方圖的分布。
直方圖分布是顏色越深棱诱,分布得越多泼橘。
點擊網(wǎng)頁上方的“histogram”按鈕,可以看到histogram的分布迈勋。
四侥加、TensorFlow可視化
參考網(wǎng)站:https://www.tensorflow.org/guide/embedding
用到的圖片的下載鏈接:https://www.tensorflow.org/images/mnist_10k_sprite.png
Shift+Tab組合鍵可以查看用到的方法的描述
誤:embedding = tf.Variable(tf.stack(mnist.test.images[:image_num],trainable=False,name='embedding'))
#這句話報錯是因為括號的位置。 trainable和name都是用來定義Variable而不是stack的粪躬。
正:embedding = tf.Variable(tf.stack(mnist.test.images[:image_num]), trainable=False, name='embedding')
代碼如下:
需要在當前文件夾下新建projector ->data:存放圖片
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?->projector
這時候在projector下的projector文件里出現(xiàn)了很多新文件担败。
同樣按照之前的方法打開tensorboard,點擊“projector”镰官。
點擊Color并選擇提前,可以給projector上色。
點擊T-SNE泳唠,可以看到收斂和聚類的過程狈网。也可以改變學習率去看收斂過程。