zoukankan      html  css  js  c++  java
  • P53 trainable 学习率的调整,梯度爆炸

    import tensorflow as tf
    def myregession():
        """
        自实现一个线性回归预测
        :return: None
        """
        #1. 准备数据 x 特征值,[100,1],  100个样本,1个特征
        #           y 目标值 ,[100]
        x=tf.random_normal([10,1],mean=1.75,stddev=0.5,name="x_data")#这个是真实的特征值
        y_true= tf.matmul(x,[[0.7]])+0.8  #先假设已经知道这个线性关系,其实现实中是不知道的,为了准备准据,才这样假设的
        #注:矩阵相乘必须是二维的
        # 2. 建立线性回归模型,一个特征,1个权重,一个偏置,y=wx+b
        #w,b需要随机初始化一个值,从这个地方开始优化,从这个地方计算损失,然后在当前状态下优化
        #trainable参数是指定这个变量能否跟着梯度下降一起优化
        
        weight= tf.Variable(tf.random_normal([1,1],mean=0.0,stddev=1.0),name="w",trainable=False)
        #权重必须定义成tf的变量,因为只有用变量定义才能优化,必须是二维的,所以定义成1行1列
        bias=tf.Variable(0.0,name='b')
        y_predict=tf.matmul(x,weight)+bias
        # 3. 建立损失函数,求均方误差
        loss=tf.reduce_mean(tf.square(y_true-y_predict))
        # 3. 梯度下降优化损失,learning_rate:0~1,2,3,5,7,10
        train_op=tf.train.ProximalGradientDescentOptimizer(0.1).minimize(loss)
        #定义个一个初始化变量的 op
        init_op=tf.global_variables_initializer()
        #通过会话运行程序
        with tf.Session() as sess:
            # 初始化变量
            sess.run(init_op)
    
            #打印最先随机初始化的权重和偏置
            print("随机初始化的参数,权重为:%f,偏置为:%f"%(weight.eval(),bias.eval()))
            #注:weight,bias是不能直接打印的,因为它们是op
            # 运行优化
    
            #循环训练,持续优化
            for i in range(300):
                sess.run(train_op)
                print("第%d次运行优化后的参数,权重为:%f,偏置为:%f" % (i,weight.eval(), bias.eval()))
    
        return None
    
    if __name__=="__main__":
        myregession()

    运行结果:

    随机初始化的参数,权重为:0.923550,偏置为:0.000000
    第0次运行优化后的参数,权重为:0.923550,偏置为:0.067194
    第1次运行优化后的参数,权重为:0.923550,偏置为:0.135915
    第2次运行优化后的参数,权重为:0.923550,偏置为:0.186926
    第3次运行优化后的参数,权重为:0.923550,偏置为:0.225835
    第4次运行优化后的参数,权重为:0.923550,偏置为:0.257090
    第5次运行优化后的参数,权重为:0.923550,偏置为:0.287806
    第6次运行优化后的参数,权重为:0.923550,偏置为:0.299400
    第7次运行优化后的参数,权重为:0.923550,偏置为:0.315512
    第8次运行优化后的参数,权重为:0.923550,偏置为:0.341794
    第9次运行优化后的参数,权重为:0.923550,偏置为:0.345407
    第10次运行优化后的参数,权重为:0.923550,偏置为:0.358482
    第11次运行优化后的参数,权重为:0.923550,偏置为:0.369397
    第12次运行优化后的参数,权重为:0.923550,偏置为:0.372021
    第13次运行优化后的参数,权重为:0.923550,偏置为:0.399361
    第14次运行优化后的参数,权重为:0.923550,偏置为:0.394093
    第15次运行优化后的参数,权重为:0.923550,偏置为:0.399880
    第16次运行优化后的参数,权重为:0.923550,偏置为:0.398234
    第17次运行优化后的参数,权重为:0.923550,偏置为:0.399431
    第18次运行优化后的参数,权重为:0.923550,偏置为:0.400979
    第19次运行优化后的参数,权重为:0.923550,偏置为:0.399697
    第20次运行优化后的参数,权重为:0.923550,偏置为:0.405342
    第21次运行优化后的参数,权重为:0.923550,偏置为:0.403404
    第22次运行优化后的参数,权重为:0.923550,偏置为:0.409384
    第23次运行优化后的参数,权重为:0.923550,偏置为:0.421517
    ...
    第296次运行优化后的参数,权重为:0.923550,偏置为:0.397181
    第297次运行优化后的参数,权重为:0.923550,偏置为:0.397113
    第298次运行优化后的参数,权重为:0.923550,偏置为:0.392938
    第299次运行优化后的参数,权重为:0.923550,偏置为:0.405100

    Process finished with exit code 0

    可见,trainable设为false的时候,weight是没有跟着梯度下降一起优化的。

  • 相关阅读:
    c# winform treelistview的使用(treegridview)
    基于Windows服务的聊天程序
    .Net Core集成Office Web Apps(二)
    .Net Core集成Office Web Apps(一)
    .Net页面局部更新的思考
    C#下载歌词文件
    jquery导航栏
    Select2下拉框总结
    数位dp入门(内容一样,新版格式)
    我的emacs简易配置
  • 原文地址:https://www.cnblogs.com/yibeimingyue/p/14168652.html
Copyright © 2011-2022 走看看