1. ops = tf.train.GradientDescentOptimizer(learning_rate) 構建優化器git
參數說明:learning_rate 表示輸入的學習率算法
2.ops.compute_gradients(loss, tf.train_variables(), colocate_gradients_with_ops=True) app
參數說明:loss表示損失值, tf.train_variables() 表示須要更新的參數, colocate_gradients_with_ops= True表示進行漸變的操做dom
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算法的學習率增長