zoukankan      html  css  js  c++  java
  • 使用多个梯度下降的方式进行测试,同时使用ops.apply_gradient进行梯度的下降

    1. ops = tf.train.GradientDescentOptimizer(learning_rate) 构建优化器

    参数说明:learning_rate 表示输入的学习率

    2.ops.compute_gradients(loss, tf.train_variables(), colocate_gradients_with_ops=True) 

    参数说明:loss表示损失值, tf.train_variables() 表示需要更新的参数, colocate_gradients_with_ops= True表示进行渐变的操作

    tf.train.GradientDescentOptimizer 梯度下降优化器
    import numpy as np
    import tensorflow as tf
    import matplotlib.pyplot as plt
    TRAIN_STEP = 20
    
    data = []
    num_data = 1000
    for i in range(num_data):
        x_data = np.random.normal(0.0, 0.55)
        y_data = 0.1 * x_data + 0.3 + np.random.normal(0.0, 0.03)
        data.append([x_data, y_data])
    
    # 第二步:将数据进行分配,分成特征和标签
    X_data = [v[0] for v in data]
    y_data = [v[1] for v in data]
    learning_rate_placeholder = 0.5 # 初始学习率
    global_step = tf.Variable(0, trainable=False) # 设置初始global_step步数
    learning_rate = tf.train.exponential_decay(learning_rate_placeholder, global_step, 15, 0.1, staircase=True)
    W = tf.Variable(tf.truncated_normal([1], -1, 1), 'name') # 进行参数初始化操作
    b = tf.Variable(tf.zeros([1]))
    
    logits = X_data * W + b # 构造拟合函数
    loss = tf.reduce_mean(tf.square(y_data - logits)) # 使用平方和来计算损失值
    opt = tf.train.GradientDescentOptimizer(learning_rate) # 构造梯度下降优化器
    grad = opt.compute_gradients(loss, tf.trainable_variables(), colocate_gradients_with_ops=True) # 计算梯度,这里的trainable_variables()表示所有的参数,这里我们可以使用参数进行finetune操作
    grad_opt = opt.apply_gradients(grad, global_step=global_step) # 进行global的迭代更新,同时构造更新梯度的操作
    UPDATA_OP = tf.get_collection(tf.GraphKeys.UPDATE_OPS) # 收集之前的操作
    with tf.control_dependencies(UPDATA_OP): # 在进行训练操作之前先将保证其它操作做完
        train_op = tf.group(grad_opt) # 进行操作的实例化,用于进行参数更新
    sess = tf.Session() 
    sess.run(tf.global_variables_initializer()) # 权重参数初始化操作
    for i in range(TRAIN_STEP):
        sess.run(train_op) # 进行实际的参数更新操作 
    
    plt.plot(X_data, y_data, '+') # 画图操作 
    plt.plot(X_data, X_data*sess.run(W) + sess.run(b), '-')
    plt.show()

    tf.train.AdamOptimizer 自适应学习率梯度下降 

     tf.train.MomentumOptimizer(learning_rate, 0.7) 动量梯度下降
    原理说明:

    
    

    tf.train.AdagradOptimizer Adagra算法的学习率增加

    
    
    
    


  • 相关阅读:
    最简单的图片轮播
    首页图片轮播效果
    windows简单杀死进程的批处理程序
    js实现无限级树形导航列表
    漂亮竖向菜单 有缓存 javascript
    竖向折叠二级导航JS代码(可防刷新ul/li结构)
    bzoj 1060: [ZJOI2007]时态同步【树形dp】
    bzoj 2733: [HNOI2012]永无乡【并查集+权值线段树】
    洛谷 P3952 时间复杂度【模拟】
    bzoj 2208: [Jsoi2010]连通数【tarjan+拓扑+dp】
  • 原文地址:https://www.cnblogs.com/my-love-is-python/p/11354335.html
Copyright © 2011-2022 走看看