这一节使用TF搭建一个简单的神经网络用于回归预测,首先随机生成一组数据

  1. import tensorflow as tf
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. tf.set_random_seed(42)
  5. np.random.seed(42)
  6. x = np.linspace(-1,1,100)[:,np.newaxis] #<==>x=x.reshape(100,1)
  7. noise = np.random.normal(0,0.1,size = x.shape)
  8. y=np.power(x,2) + x +noise #y=x^2 + x+噪音
  9. plt.scatter(x,y)
  10. plt.show()

随机生成了一组数据,模型为\(y=x^2+x\),看一下数据的分布

接下来搭建一个含有一个隐藏层的神经网络,损失选择使用均方差误差

  1. #模型部分
  2. tf_X = tf.placeholder(tf.float32,x.shape) #=>X
  3. tf_y = tf.placeholder(tf.float32,y.shape) #=>y
  4. output = tf.layers.dense(tf_X,10,tf.nn.relu,name="hidden")#隐藏层10个节点
  5. output = tf.layers.dense(output,1,name='output') #1个输出层
  6. #loss = tf.losses.mean_squared_error(tf_y,output)
  7. loss = tf.reduce_mean(tf.sqrt(tf.pow(tf_y-output,2)))
  8. optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.2)
  9. train_op = optimizer.minimize(loss)

其中tf.losses中提供了常用的损失函数实现,也可以自己去实现,开始训练模型

  1. with tf.Session() as sess:
  2. sess.run(tf.global_variables_initializer())
  3. plt.ion()
  4. for step in range(100):
  5. _,err,pred = sess.run([train_op,loss,output],feed_dict={tf_X:x,tf_y:y})
  6. #cla() # Clear axis
  7. #clf() # Clear figure
  8. #close() # Close a figure window
  9. plt.cla()#
  10. plt.scatter(x,y)
  11. plt.plot(x,pred,'r-',lw=5)
  12. plt.text(0.5, 0, 'Loss=%.4f' % err, fontdict={'size': 20, 'color': 'red'})
  13. #plt.show()
  14. plt.ioff()
  15. plt.show()

看一看效果:

note:上面使用了plt.cla方法,这是由于方便看到变化过程,将plot过程写入到了for循环中,为了避免发生意外错误将对象从内存中清空。

posted on 2018-03-25 17:32 Wanna_Go 阅读() 评论() 编辑 收藏

版权声明:本文为wxshi原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/wxshi/p/8645613.html