使用多個梯度降低的方式進行測試,同時使用ops.apply_gradient進行梯度的降低

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

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算法的學習率增長

相關文章
相關標籤/搜索