weixin_38960656 2018-12-12 13:59 采纳率: 100%
浏览 1104
已采纳

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条回答 默认 最新

  • csdn__DRAGON 2018-12-13 06:28
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用