本來用推文的,但越推越長,所以簡單回文好了.沒仔細搞懂你的
程式碼,但看到幾點問題:
1.正常的情況下,如果你要做的是分類器,你的output應該是softmax,
而不是用sigmoid,這不是正常會採用的輸出層修正.如果要搞懂
softmax,你最好也花點時間搞懂cross entropy.如果你要做的是回
歸器,一般會用均方差.(但我不懂為啥你的程式的loss定義的是
平均差? 除非正負號對誤差有意義,不然這很少用.你最好確定一下)
2.新版的tensorflow,已經把initialize_all_variabel改成
tf.global_variables_initializer,你的範例有點舊了.
3.一般來說,多層感知器(也就是最簡單的全連結神經網路)我們不會
去設定太多層,通常設個一兩層就夠了.如果你覺得結果不好,先試
試看把節點加多,而不是把層加厚.這會讓你的模型簡單一些.如果
還是不好,我們再試試看增加層數.不要一股腦地就就出很多層的
結構.這樣不僅難以分析,也很容易造成過擬合.
4.一個好的機器學習模型,不是不停地增加複雜度,讓問題可以被擬
合的越準越好,而是設計出一個模型,用最低程度的複雜度來回答
出問題最好.因為真實場景下的資料是不會盡如人意的,過於複雜
的模型除了浪費資源外,你也不容易修正模型.所以一看到問題就
先給他來個10層,20層不是好事.
5.看的出來你對機器學習還有神經網路不太懂,其實對於初學者,我是
不推薦一開始就從tensorflow上手的,我建議你應該先學scikit learn
跟Keras. scikit learn集成了很多機器學習的模型,你會比較了解
"分類,迴歸,聚類(clustering),降維"這機器學習中的四大基本觀念.
然後你再進到神經網路裡面,你會發現神經網路看似複雜,其實也就
是換個手段來處理上面這四大類問題而已.本質上差異不大.
6.如果你開始要進到神經網路了,我建議你可以先試著從Keras上手,
Keras是基於tensorflow的高階API,他是以模型導向的方式讓你建
構神經網路.而且Keras已經被收錄到tensorflow中了,之後應該會
從contrib中移到正式的架構內. 從Keras下手可以先幫助你了解
模型,再去深究tensorflow的語法.
如果你對機器學習的模型一無所知就想透過學tensorflow來理解
機器模型,是很容易吃鱉的,模型一個沒搞懂就先被他複雜的架構
給淹沒了(其實我甚至覺得tensorflow根本就是設計來做後端,他
本來就不該拿來做前端使用,你有需要每次開車都先從組裝輪子
開始?).這就像是你想學開車,你該做的事情是先去上駕訓班,而不
是去學汽車組裝.這不是不行,但那是等你有一天把車玩精了,想
改車的時候在做的事情.
說了這麼多,還是想講一點,機器學習的本質,核心,是那些一個一個
的模型,模型懂了,其實用哪套東西實作反而是次要的了.