2016-12-26 27 views

回答

3

使用Theano/Tensorflow和庫的好處之一就是建立在它們之上。他們可以爲您提供數學函數和操作的自動梯度計算。

Keras通過調用讓他們:

# keras/theano_backend.py 
def gradients(loss, variables): 
    return T.grad(loss, variables) 

# keras/tensorflow_backend.py 
def gradients(loss, variables): 
    '''Returns the gradients of `variables` (list of tensor variables) 
    with regard to `loss`. 
    ''' 
    return tf.gradients(loss, variables, colocate_gradients_with_ops=True) 

這是在grads = self.get_gradients(loss, params)又通過優化稱爲(keras/optimizers.py),以獲得被用於編寫所有params更新規則的梯度。 params這裏是層次的可訓練權重。但是由La​​mbda功能層創建的圖層沒有任何可訓練的權重。但它們通過前向概率影響損失函數,從而間接影響其他層次可訓練權重梯度的計算。

您只需要編寫新的梯度計算就是在定義新的基本數學運算/函數時。此外,當您編寫自定義損失函數時,自動梯度幾乎總是處理梯度計算。但是,如果您實現自定義函數的解析漸變,您可以選擇優化培訓(並非總是)。例如軟件功能可以用exp,sum和div來表示,而auto grad可以處理它,但是它的分析/符號修飾通常在Theano/Tensorflow中實現。

爲了實現新的行動,你可以看看它的下面的鏈接: http://deeplearning.net/software/theano/extending/extending_theano.html https://www.tensorflow.org/versions/r0.12/how_tos/adding_an_op/index.html