【发布时间】:2020-11-10 05:57:43
【问题描述】:
我在 tensorflow 2.0 中使用多输出模型
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})
我正在使用分位数损失函数作为我的 loss1,它工作正常。
我希望我的 loss2 函数表现得像这样
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
简而言之,我正在尝试将距离公式作为我的损失函数,并将两点之间的距离最小化为 0。
我可以将 y_true 和 y_pred 从 output1 和 output2 传递给 loss2 函数吗?我尝试使用 Concatenate 至少通过 y_preds 但不知何故它不起作用。
【问题讨论】:
标签: python keras tensorflow2.0 loss-function