【機器學習】TensorFlow (二)優化器Optimizer
昨天整理了一下梯度下降演算法及其優化演算法,傳送門:https://blog.csdn.net/zxfhahaha/article/details/81385130
那麼在實戰中我們如何用到這些優化器,今天就整理一下TensorFlow中關於優化器Optimizer的API。
首先要知道的一個類是tf.train.Optimizer,它是Optimizer的基類,這個類我們不會用到,主要用到的是它的子類,這些子類都可以對應到上一篇的梯度優化演算法中的理論知識。
tf.train.GradientDescentOptimizer
GradientDescentOptimizer是執行梯度下降演算法GradientDescent的優化器,這個演算法是最基礎的梯度下降演算法,我們知道梯度下降演算法根據樣本數量分為批量梯度下降演算法(Batch Gradient Descent)、隨機梯度下降演算法(Stochastic Gradient Descent)和小批量梯度下降演算法(Mini-batch Gradient Descent)。
那麼這個GradientDescentOptimizer優化器會根據我們傳入的data的大小成為上述三種的一種。
下面介紹一些這個類常用的方法:
init 建立一個gradient descent optimizer物件
__init__(
learning_rate, #學習率
use_locking=False,
name='GradientDescent'
)
minimize 最小化loss
這個方法結合了compute_gradients()和apply_gradients(),也就是先計算梯度再將計算出的梯度應用到變數上。
minimize(
loss,
global_step=None,
var_list=None,
gate_gradients=GATE_OP,
aggregation_method=None ,
colocate_gradients_with_ops=False,
name=None,
grad_loss=None
)
compute_gradients 計算出梯度
對於在變數列表(var_list)中的變數計算對於損失函式的梯度,這個函式返回一個(梯度,變數)對的列表,其中梯度就是相對應變數的梯度了。這是minimize()函式的第一個部分,
apply_gradients 將計算出的梯度應用到變數上
apply_gradients(
grads_and_vars,
global_step=None,
name=None
)
下面的優化器都是對於梯度下降演算法進行改進後的演算法的優化器,使用的道理都是一樣的,所使用的函式也都和最基礎的沒什麼區別。
tf.train.AdamOptimizer
AdamOptimizer執行Adam演算法的優化器,這個演算法結合了Momentum和RMSprop,是自適應學習率的。
init
有預設的引數
__init__(
learning_rate=0.001,
beta1=0.9,
beta2=0.999,
epsilon=1e-08,
use_locking=False,
name='Adam'
)