[问题] 利用神经网络趋近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