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)
还没有任何评论哟~
