tensorflow keras 報錯 :No gradients provided for any variable 原因與解決辦法

錯誤分析

No gradients provided for any variable這個意思是沒有梯度給已知的所有函數,
爲什麼會出現這個錯誤呢,因爲在深度學習中,梯度的更新是由於反向傳播算法的實現的,如果損失函數沒有與已知的任何(除輸入)層關聯,那麼,損失函數就無法求出關於各個函數的梯度,導致錯誤

解決辦法

例如
損失函數

    def contrastive_loss_layer( left_inputs, right_inputs, label_inputs):
        img=left_inputs
        change_img=right_inputs
        y=label_inputs
        different=img-change_img
        margin = 1
        square = K.square(different)
        margin_square = K.square(K.maximum(margin - y, 0))
        loss=(y* square + (1 - y) * margin_square)
        loss=tf.reduce_mean(loss)

        return loss
model=keras.Model(inputs=[left_inputs, right_inputs,label_inputs],
 outputs=[outputs,loss],name='model')

其中損失函數直接與輸入層關聯,那麼就無法提供梯度
這時候必須讓損失函數與原有的模型的層相關聯纔可以

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章