錯誤分析
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')
其中損失函數直接與輸入層關聯,那麼就無法提供梯度
這時候必須讓損失函數與原有的模型的層相關聯纔可以