Advertisement

CS285 2019 Tensorflow Tutorial(train a neural network)

阅读量:

建立一个单变量回归模型,并通过构建输入层、权重变量、神经网络操作、均方误差损失函数以及梯度下降优化器实现对数据的学习过程;并使用小批量数据进行优化器的训练以提升模型性能。

复制代码
 # -*- coding: utf-8 -*-

    
  
    
 import os
    
 import warnings
    
 os.environ['TF_CPP_MIN_LOG_LEVEL']='3'
    
 warnings.filterwarnings('ignore')
    
  
    
 import tensorflow as tf
    
 import numpy as np
    
 import matplotlib.pyplot as plt
    
 import matplotlib.cm as cm
    
 import matplotlib.patches as mpatches
    
  
    
 def tf_reset():
    
     try:
    
     sess.close()
    
     except:
    
     pass
    
     tf.reset_default_graph()
    
   
    
     return tf.Session()
    
  
    
 #4. How to train a neural network for a simple regression problem
    
 inputs = np.linspace(-2*np.pi, 2*np.pi, 10000)[:, None]
    
 outputs = np.sin(inputs) + 0.05 * np.random.normal(size=[len(inputs),1])
    
 plt.scatter(inputs[:, 0], outputs[:, 0], s=0.1, color='k', marker='o')    
    
  
    
 sess =tf_reset()
    
 def create_model():
    
     #create inputs
    
     input_ph=tf.placeholder(dtype=tf.float32,shape=[None,1])
    
     output_ph =tf.placeholder(dtype=tf.float32,shape=[None,1])
    
     
    
     #create variables
    
     W0= tf.get_variable(name='W0',shape=[1,20],initializer=tf.contrib.layers.xavier_initializer())
    
     W1= tf.get_variable(name='W1',shape=[20,20],initializer=tf.contrib.layers.xavier_initializer())
    
     W2= tf.get_variable(name='W2',shape=[20,1],initializer=tf.contrib.layers.xavier_initializer())
    
     
    
     b0=tf.get_variable(name='b0',shape=[20],initializer=tf.constant_initializer(0.))
    
     b1=tf.get_variable(name='b1',shape=[20],initializer=tf.constant_initializer(0.))
    
     b2=tf.get_variable(name='b2',shape=[1],initializer=tf.constant_initializer(0.))
    
  
    
     weights =[W0,W1,W2]
    
     biases=[b0,b1,b2]
    
     activations=[tf.nn.relu,tf.nn.relu,None]
    
     
    
     #create computation graph
    
     layer =input_ph
    
   
    
     for W,b,activation in zip(weights,biases,activations):
    
     layer=tf.matmul(layer,W)+b
    
     if activation is not None:       
    
         layer =activation(layer)
    
     output_pred =layer
    
     return input_ph,output_ph,output_pred
    
  
    
 input_ph,output_ph,output_pred =create_model()
    
  
    
 #create loss
    
 mse = tf.reduce_mean(0.5*tf.square(output_pred-output_ph))
    
  
    
 #create optimiser
    
 opt=tf.train.AdamOptimizer().minimize(mse)
    
  
    
 #initialize variables
    
 sess.run(tf.global_variables_initializer())
    
 saver=tf.train.Saver()
    
  
    
 #run training 
    
 batch_size =32
    
 for training_step in range(10000):
    
     indices =np.random.randint(low=0,high=len(inputs),size=batch_size)
    
     input_batch =inputs[indices]
    
     output_batch =outputs[indices]
    
     _,mse_run=sess.run([opt,mse],feed_dict={input_ph:input_batch,output_ph:output_batch})
    
     
    
     if training_step % 1000 ==0:
    
     print('{0:04d} mse:{1:.3f}'.format(training_step,mse_run))
    
     saver.save(sess,'./model.ckpt')
    
     
    
 #make predictions:
    
 sess =tf_reset()
    
 input_ph,outout_ph,output_pred =create_model()
    
  
    
 saver=tf.train.Saver()
    
 saver.restore(sess,'./model.ckpt')
    
  
    
 output_pred_run =sess.run(output_pred,feed_dict={input_ph:inputs})
    
  
    
 plt.scatter(inputs[:,0],outputs[:,0],c='k',marker='o',s=0.1)
    
 plt.scatter(inputs[:,0],output_pred_run[:,0],c='r',marker='o',s=0.1)
    
    
    
    
    代码解读

运行结果如下:

复制代码
 runfile('D:/2019_PycharmProjects/2019_cs294_285/homework-master/tf_lecture/TF_lecture_2.py', wdir='D:/2019_PycharmProjects/2019_cs294_285/homework-master/tf_lecture')

    
 0000 mse:0.351
    
 1000 mse:0.055
    
 2000 mse:0.016
    
 3000 mse:0.010
    
 4000 mse:0.006
    
 5000 mse:0.007
    
 6000 mse:0.002
    
 7000 mse:0.001
    
 8000 mse:0.002
    
 9000 mse:0.002
    
 INFO:tensorflow:Restoring parameters from ./model.ckpt
    
    
    
    
    代码解读

预期曲线较不光滑,中间拐点处有折点。

使用sigmoid激活函数。

复制代码
       activations=[tf.nn.sigmoid,tf.nn.sigmoid,None]
    
    代码解读

运行结果如下:

复制代码
 In [14]: runfile('D:/2019_PycharmProjects/2019_cs294_285/homework-master/tf_lecture/TF_lecture_2.py', wdir='D:/2019_PycharmProjects/2019_cs294_285/homework-master/tf_lecture')

    
 0000 mse:0.550
    
 1000 mse:0.186
    
 2000 mse:0.047
    
 3000 mse:0.053
    
 4000 mse:0.054
    
 5000 mse:0.042
    
 6000 mse:0.035
    
 7000 mse:0.030
    
 8000 mse:0.044
    
 9000 mse:0.033
    
 INFO:tensorflow:Restoring parameters from ./model.ckpt
    
    
    
    
    代码解读

预测曲线偏差较大。

使用tanh激活函数。

复制代码
      activations=[tf.nn.tanh,tf.nn.tanh,None]
    
    
    代码解读

运行结果如下:

复制代码
 0000 mse:0.287

    
 1000 mse:0.042
    
 2000 mse:0.036
    
 3000 mse:0.035
    
 4000 mse:0.009
    
 5000 mse:0.008
    
 6000 mse:0.003
    
 7000 mse:0.002
    
 8000 mse:0.002
    
 9000 mse:0.002
    
 INFO:tensorflow:Restoring parameters from ./model.ckpt
    
    
    
    
    代码解读

预测曲线较平滑。

全部评论 (0)

还没有任何评论哟~