Tensorflow建一个神经网络,输出数据只有一个谱型,且杂乱

建了一个神经网络,输入节点3个,输出250个,两个隐藏层,节点数分别为200个。
训练数据集为100000个。运行完后用测试集验证,发现预测的谱线杂乱无章,跟测试的谱线集完全无关,从图中看感觉是在一个谱型附近震荡。
初学者不明白是什么原因,不知有没有大神可以稍加指教。

import tensorflow as tf
import numpy as np
# 添加层
def add_layer(inputs, in_size, out_size,n_layer,activation_function=None):
          Weights = tf.Variable(tf.random_normal([in_size, out_size]))
          Wx_plus_b = tf.matmul(inputs, Weights)
          if activation_function is None:
           outputs = Wx_plus_b
          else:
               outputs = activation_function(Wx_plus_b)
          return outputs
# 1.训练的数据
p_1= np.loadtxt('D:p_train.txt')
p=np.reshape(p_1,(3,100000))
s_1= np.loadtxt('D:s_train.txt')
s=np.reshape(s_1,(250,100000))
pmin=p.min()
pmax=p.max()
p_train=(p-pmin)/(pmax-pmin)
smin=s.min()
smax=s.max()
s_train=(s-smin)/(smax-smin)
p_train=np.transpose(p_train)
s_train=np.transpose(s_train)
p_train=p_train.tolist()
s_train=s_train.tolist()
# 2.测试的数据
p_2=np.loadtxt('D:p_test.txt')
p2=np.reshape(p_2,(3,5501))
s_2=np.loadtxt('D:s_test.txt')
s2=np.reshape(s_2,(250,5501))
pmin2=p2.min()
pmax2=p2.max()
p_test=(p2-pmin2)/(pmax2-pmin2)
smin2=s2.min()
smax2=s2.max()
s_test=(s2-smin2)/(smax2-smin2)
p_test=np.transpose(p_test)
s_test=np.transpose(s_test)
p_test=p_test.tolist()
s_test=s_test.tolist()

# 3.定义占位符 
px = tf.placeholder(tf.float32, [None, 3])
sx = tf.placeholder(tf.float32, [None,250])
sy=tf.placeholder(tf.float32,[None,250])
# 4.定义神经层:隐藏层和预测层
l1 = add_layer(px, 3, 200, n_layer=1,activation_function=tf.nn.sigmoid)
l2=add_layer(l1,200,200,n_layer=2,activation_function=tf.nn.sigmoid)
prediction = add_layer(l2, 200, 250, n_layer=3,activation_function=None)

# 5.定义 loss 表达式 mse
loss = tf.reduce_mean(tf.square(sx - prediction))
#loss2

# 6.选择 optimizer 使 loss 达到最小                   
train_step = tf.train.AdamOptimizer(0.01,epsilon=1e-8).minimize(loss)

#7.初始化变量
init=tf.initialize_all_variables()
#8.定义会话
sess = tf.Session()
#9.运行
sess.run(init) 
#10.查看loss变化
for step in range(1000):
   sess.run(train_step, feed_dict={px:p_train, sx:s_train})
   if step % 50 == 0:    
        print(sess.run(loss,feed_dict={sx:s_train,px:p_train}))

prediction_test=sess.run(prediction,feed_dict={px:p_test})

2个回答

可以试着调整神经层的结构和模型的超参数,试着多次调整达到对每个参数的理解,建议可以先简要看看莫烦的视频教程,对各个参数有个大致了解,这是链接https://morvanzhou.github.io/

weixin_38960656
weixin_38960656 超级感谢,扩大了几倍训练次数,结果好了很多!
11 个月之前 回复

你看到人家的神经网络做得很好,那是不断调整模型反复优化参数才做出来的。
你这么随便一个数据集,然后随便定义一个模型,随便一算,如果就算出来很好的效果,那才见鬼呢。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!