[英]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.