版上大神好,小弟大三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
感激不尽