[問題] 利用神經網路趨近0或1來判別(驗證問題)

作者: cosmicray (nothing)   2018-09-14 01:03:47
版上大神好,小弟大三EE還是此領域新手,目前使用tensorflow來實作
求大神解答QQ,本人寒酸有給建議的人一率奉上微薄100P
我稍微說明一下程式目的及架構,裡面code也有稍微打個註解
我有找到一份資料是是關於航線是否延遲共有8個特徵
裡面有九個元素前八個是特徵,最後一項是答案0或1
然後一共有1175筆資料
現在希望架設個神經網路訓練它,接著再拿別筆資料1*8矩陣送進去使它趨近0或1
架構應該是對的但想餵資料驗證時有問題QQ
當然裡面有先對資料做正規化,使用公式為Xnorm=(X-Xmin)/(Xmax-Xmin)
架構為inputs layer有8個神經元接著隱藏層1有6個神經元,
隱藏層2有3個神經元再輸出層一個神經元,也就是讓它1*8矩陣收斂為1*1矩陣
前面50筆當驗證用剩餘部分拿來訓練
大致就是隨機取一筆訓練30000次
這是我的程式檔:
https://github.com/Hawkingfans/airline_delayed_judgment/blob/master/.gitignore
以及data: https://goo.gl/RNRxnD
放在github裡
但執行結果卻是: https://imgur.com/ZUwSqh8
每個output都一樣....猜是訓練方式有問題?
不知道可以如何修改?
但因發現似乎解法是想驗證一筆資料就要再重新train一次?不確定
所以暫時修改為:(只動with裡面)
with tf.Session() as sess:
sess.run(init)
for k in range(0,10):
#訓練部分(扣除前10筆資料所剩餘的)
for i in range(20000):
n = np.random.randint(10, 1175 )
line_data = norm_data[np.newaxis, n, 0: 8]
expect = data[n, 8]
expected= np.reshape(expect,[1,1])
sess.run(train_step, feed_dict={xs: line_data,ys: expected})
#驗證部分(前10筆資料)
examine_data = norm_data[np.newaxis, k, 0: 8]
answer = norm_data[k, 8]
output = sess.run( y,feed_dict={xs: examine_data})
print("output =",output)
print("answer=", answer)
print("======================")
其實就是變成雙層for迴圈而已但因為這樣驗證會太久...所以就切10筆而已
結果如圖: https://imgur.com/jDSPjWk
看起來似乎有達到目的但這種做法要是切300筆資料要驗證,
不就變300*20000次....這會跑超久捏 = ="
且主要是這方法我拿去問教授,他說這樣是不對的.........
他說應該是訓練完好,驗證再另個block也就是不用重新train。
想請教各位如何修改才是正確的訓練?
希望以原本的方法為主,已經為此想破頭好幾天QAQ
感激不盡
作者: frank910138 (frank)   2018-09-14 01:19:00
這樣看起來是分類問題,可以將label做one-hoe encoding ,變成[0, 1], [1,0] ,output num = 2
作者: f496328mm (為什麼會流淚)   2018-09-14 02:02:00
嗯,這問題很大,第一,data太少,DL效果不好,可以試試ML。第二,balance的問題。第三,要做 feature engineeringtensorflow 網路上很多範例,去看看應該有幫助,新手直接碰tensorflow 有點困難,建議重基礎的ML開始,有很多概念要知道
作者: tsoahans (ㄎㄎ)   2018-09-14 02:10:00
你沒用sigmoid一般分類問題loss是用cross entropy
作者: Northrn   2018-09-14 10:22:00
tensorflow 推 Hvass-Labs 的教學
作者: jackwang01 (艾斯比那)   2018-09-14 12:53:00
還沒仔細看程式,有幾個問題可能有幫助1.神經元數量太少,網路根本沒辦法fit2. 取資料訓練的時候應該是一次取一個batch下去訓練,然後輪完整個資料集再重複動作3. 我不太懂驗證的時候那個20000是做什麼的?驗證只要輸入x跑一次就能得到一個預測的y了另外如果你們教授許可的話,新手從keras或pytorch入門會簡單非常多
作者: st1009 (前端攻城師)   2018-09-14 15:01:00
歡迎試著到DataScience板發文唷,那邊是機械學習專板
作者: jackwang01 (艾斯比那)   2018-09-14 18:59:00
你可能要先搞懂一下batch這個概念,在神經網路中一次train一筆跟一次train一個batch結果可能差很多再來就是上面提到的神經網路太淺太瘦試試看先把神經元數量加大 可能幾百以上還有一點,你train完20000次之後,接著驗證50筆資料,而不是你文中的每train20000再驗證一筆
作者: alan23273850   2018-09-15 05:39:00
何不用 keras?

Links booklink

Contact Us: admin [ a t ] ucptt.com