- import tensorflow as tf
- from numpy.random import RandomState
- w1 = tf.Variable(tf.truncated_normal([2,3],seed=1))
- w2 = tf.Variable(tf.truncated_normal([3,1],seed=1))
- x = tf.placeholder(dtype=tf.float32,shape=[None,2])
- y_real = tf.placeholder(dtype=tf.float32,shape=[None,1])
- a = tf.nn.relu(tf.matmul(x,w1)) #神经元的激活函数为 relu
- y_pre = tf.nn.relu(tf.matmul(a,w2))
- sample_size = 20000 #训练样本总数
- batch = 500 # 使用mini-batch(批梯度下降),每个batch的大小。
- rds = RandomState(0)
- X = rds.rand(sample_size,2)
- Y = [[int(20*x1+30*x2)]+rds.rand(1) for (x1,x2) in X]
- global_step = tf.Variable(0)
- #--------------学习速率的设置(学习速率呈指数下降)--------------------- #将 global_step/decay_steps 强制转换为整数
- learning_rate = tf.train.exponential_decay(1e-2,global_step,decay_steps=sample_size/batch,decay_rate=0.98,staircase=True)
- MSE = tf.reduce_mean(tf.square(y_real-y_pre)) # 使用均方误差(MSE)作为损失函数
- train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(MSE,global_step=global_step)
- step = 20000 #训练的总次数
- start = 0
- end = batch
- sess = tf.Session()
- sess.run(tf.global_variables_initializer())
- for i in range(step):
- sess.run(train_step,feed_dict={x:X[start:end],y_real:Y[start:end]})
- if not i%20:
- H = sess.run(MSE,feed_dict={x:X[start:end],y_real:Y[start:end]})
- lr = sess.run(learning_rate)
- print ("MSE: ",H,"\t","learning_rate: ",lr)
- if H<1e-1: #采用stop early 的方法防止过拟合,节省训练时间。
- break
- strat = end if end<sample_size else 0
- end = start+batch
- y1 = sess.run(y_pre,feed_dict={x:X[start:end]})
- y2 = Y[start:end]
- sess.close()
- #训练结果的部分展示
- for i in range(100):
- print(y1[i],y2[i])
Tensorflow 学习速率的设置|学习速率的指数下降
最新推荐文章于 2022-04-10 22:30:41 发布