簡體   English   中英

我可以在單個損失函數中使用多個“實際”和“預測”輸出嗎?

[英]Can I use multiple “actual” and “predicted” outputs in a single loss functions?

我在 tensorflow 2.0 中使用多個 output model

input_layer = layers.Input(shape=(INP_MAX_LENGTH), name="input")
embed_layer = layers.Embedding(EMBED_INP_DIM, embedding_size, name="embeddings", weights=[embedding_matrix],  trainable=False, input_length=INP_MAX_LENGTH)(input_layer)
  
lstm_layer1 = layers.LSTM(1024, name="lstm1")(embed_layer)
lstm_layer2 = layers.LSTM(1024, name="lstm2")(embed_layer)
  
output_layer1 = layers.Dense(1, name="output1", activation='relu')(lstm_layer1)
output_layer2 = layers.Dense(1, name="output2", activation='relu')(lstm_layer2)

concat_layer = layers.Concatenate()([output_layer1, output_layer2])

output_layer3 = layers.Dense(1, name="output3", activation='relu')(concat_layer)

model = Model(input=input_layer, output=[output_layer1, output_layer2, output_layer3])

model.compile((optimizer='adagrad', loss={'output1': loss1, 'output2': loss1, 'output3':loss2})

我使用分位數損失 function 作為我的 loss1,它工作正常。

我希望我的 loss2 function 表現得像這樣

import tensorflow.keras.backend as K

def loss2(y_true, y_pred):
   # y_true1 = y from output1
   # y_true2 = y from output2
   # y_pred1 = y from output_layer1
   # y_pred2 = y from output_layer2
   # loss = K.mean(y_true - (K.sqrt(K.square(y_true2 - y_pred2) + K.square(y_true1 - y_pred1)))), axis=-1)
   return loss

簡而言之,我試圖將距離公式作為我的損失 function 並將兩點之間的距離最小化為 0。

我可以將 y_true 和 y_pred 從 output1 和 output2 傳遞到 loss2 function 嗎? 我嘗試使用 Concatenate 至少通過 y_preds 但不知何故它不起作用。

是的,當您有多個 output 節點時,您可以擁有接受多個預測的損失函數。

基本思想是始終將您的 output 視為向量,因此當您從生成器 function 傳遞它時,它應該是一個列表,而當它傳遞給損失函數時,它應該仍然是一個列表。

與其對每個 output 節點使用不同的損失函數,理想情況下,您應該為所有輸出組合使用一個損失 function。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM