2017-05-25 757 views
1

我使用的是多輸出模型kerasKeras多種輸出:自定義損失函數

model1 = Model(input=x, output=[y2,y3]) 

model1.compile((optimizer='sgd', loss=cutom_loss_function) 

custom_loss_function是;

def custom_loss(y_true, y_pred): 
    y2_pred = y_pred[0] 
    y2_true = y_true[0] 

    loss = K.mean(K.square(y2_true - y2_pred), axis=-1) 
    return loss 

我只想訓練網絡輸出y2

當使用多個輸出時,損失函數中的參數y_predy_true的形狀/結構是什麼? 我可以如上訪問它們嗎?是y_pred[0]還是y_pred[:,0]

回答

1

我只想在輸出y2上訓練網絡。

基於Keras functional API guide可以實現與

model1 = Model(input=x, output=[y2,y3]) 
model1.compile(optimizer='sgd', loss=custom_loss_function, 
        loss_weights=[1., 0.0]) 

什麼損失 功能y_pred和y_true論證的形狀/結構,當使用多個輸出?我可以像上面那樣訪問它們嗎? 是否y_pred [0]或y_pred [:,0]

在keras多輸出模型損失函數分別應用於每個輸出。在僞代碼中:

loss = sum([ loss_function(output_true, output_pred) for (output_true, output_pred) in zip(outputs_data, outputs_model) ]) 

對多個輸出執行丟失功能的功能似乎對我無效。一個可能通過將損失函數作爲網絡層來實現。

+0

'在keras多輸出模型損失函數分別應用於每個輸出.'我有類似的問題,我分別需要兩個獨立輸出的y_true和y_pred值。我該如何解決這個問題? – Eka

+1

除非框架最近發生了變化,否則最簡單的解決方案是將輸出連接成單個丟失函數,然後在那裏處理它們 – Sharapolas