学习率的探索(基于利用tensorflow拟合2次函数方程参数实验)

一、基本配置:windows、python3.5(使用3.5以上版本可能存在无法运行tensorflow的情况)、pycharm2018.1.4、tensorflow1.12.0
二、实验基本步骤:1、利用numpy随机产生100个数值,即x_data,再构建y_data=x_data²+2。2、构建拟合方程y=x_data**k+b,目的找出k和b同实际值2进行比较,看拟合效果。3、构建损失函数loss,损失函数为(y-y_data)平方的均值,选择优化器随机梯度下降算法。4、train过程的实现,迭代次数选择10000次(for step in range(10001)),每200次打印下拟合效果(step%200==0)。
三、代码示例:
import tensorflow as tf
import numpy as np
x_data=np.random.rand(100)
y_data=x_data**2+2
b=tf.Variable(0.)
k=tf.Variable(0.)
y=x_data**k+b
loss=tf.reduce_mean(tf.square(y_data-y)) 
optimizer=tf.train.GradientDescentOptimizer(0.2)
train=optimizer.minimize(loss)
init=tf.global_variables_initializer()
with tf.Session() as sess:    
    sess.run(init)    
    for step in range(10001):        
        sess.run(train)        
        if step%200==0:            
            print(step,sess.run([k,b]))   
四、不同学习率选择的实验效果:
1、当学习率选择GradientDescentOptimizer(0.01)时,输出结果(最后两行)为:9800 [1.5607325, 1.9447095]10000 [1.5691489, 1.9459429]表明经过10000次迭代后,和目标值(2,2)还有一段距离,需要调整迭代次数或者学习率。
2、当学习率选择GradientDescentOptimizer(0.05)时,输出结果为,还有可以优化空间。9800 [1.9830478, 1.9980762]10000 [1.9843289, 1.9982222]
3、当学习率选择GradientDescentOptimizer(0.1)时,输出结果为:9800 [1.9978328, 1.9997468]10000 [1.9980824, 1.9997759]
4、当学习率选择GradientDescentOptimizer(0.2)时,输出结果为:9800 [21.72233, 2.2957716]10000 [21.684946, 2.2957044]
五、当学习率较小时,会出现loss下降过慢的情况,影响学习的效率;此时,随着学习率的逐渐变大时,loss值会逐渐变小;但是当学习率到达某一阈值时,loss反而会剧烈增加,陷入局部最优。如果我们向一个凹槽处投入一个小球,让小球滚动凹槽的最低点,学习率可以看作是给小球的原始初速度,如果初速度过小,会影响小球到达最低点的时间,但是如果初速度过大,可能是整个小球脱离整个凹槽区域。

你可能感兴趣的:(学习率的探索(基于利用tensorflow拟合2次函数方程参数实验))