我们可以在同一层使用多个损失函数吗?
Can we use multiple loss functions in same layer?
我们可以在这个架构中使用多个损失函数吗:
我有两种不同类型的损失函数,想在最后一层使用它 [输出]
损失函数:
- binary_crossentropy
- 自定义损失函数
我们能做到吗?
是的,您可以...您只需在模型定义中重复模型输出 2 次。您还可以使用 loss_weights 参数以不同的方式合并您的损失(两次损失的默认值为 [1,1])。下面是一个虚拟回归问题的例子。 https://colab.research.google.com/drive/1SVHC6RuHgNNe5Qj6IOtmBD5geAJ-G9-v?usp=sharing
def rmse(y_true, y_pred):
error = y_true-y_pred
return K.sqrt(K.mean(K.square(error)))
X1 = np.random.uniform(0,1, (1000,10))
X2 = np.random.uniform(0,1, (1000,10))
y = np.random.uniform(0,1, 1000)
inp1 = Input((10,))
inp2 = Input((10,))
x = Concatenate()([inp1,inp2])
x = Dense(32, activation='relu')(x)
out = Dense(1)(x)
m = Model([inp1,inp2], [out,out])
m.compile(loss=[rmse,'mse'], optimizer='adam') # , loss_weights=[0.3, 0.7]
history = m.fit([X1,X2], [y,y], epochs=10, verbose=2)
你可以计算出两种不同的损失。然后得到加权均值和 return 作为损失的最终值。从技术上讲,它可以这样实现(这是一个例子,我没有运行):
def joint_loss(y_true, y_pred):
part_binary_crossentropy = 0.4
part_custom = 0.6
# binary_crossentropy
loss_binary_crossentropy = tf.keras.losses.binary_crossentropy(y_true, y_pred)
# custom_loss
loss_custom = some_custom_loss(y_true, y_pred))
return part_binary_crossentropy * loss_binary_crossentropy + part_custom * loss_custom
model.compile(loss=joint_loss, optimizer='Adam')
我们可以在这个架构中使用多个损失函数吗: 我有两种不同类型的损失函数,想在最后一层使用它 [输出] 损失函数:
- binary_crossentropy
- 自定义损失函数
我们能做到吗?
是的,您可以...您只需在模型定义中重复模型输出 2 次。您还可以使用 loss_weights 参数以不同的方式合并您的损失(两次损失的默认值为 [1,1])。下面是一个虚拟回归问题的例子。 https://colab.research.google.com/drive/1SVHC6RuHgNNe5Qj6IOtmBD5geAJ-G9-v?usp=sharing
def rmse(y_true, y_pred):
error = y_true-y_pred
return K.sqrt(K.mean(K.square(error)))
X1 = np.random.uniform(0,1, (1000,10))
X2 = np.random.uniform(0,1, (1000,10))
y = np.random.uniform(0,1, 1000)
inp1 = Input((10,))
inp2 = Input((10,))
x = Concatenate()([inp1,inp2])
x = Dense(32, activation='relu')(x)
out = Dense(1)(x)
m = Model([inp1,inp2], [out,out])
m.compile(loss=[rmse,'mse'], optimizer='adam') # , loss_weights=[0.3, 0.7]
history = m.fit([X1,X2], [y,y], epochs=10, verbose=2)
你可以计算出两种不同的损失。然后得到加权均值和 return 作为损失的最终值。从技术上讲,它可以这样实现(这是一个例子,我没有运行):
def joint_loss(y_true, y_pred):
part_binary_crossentropy = 0.4
part_custom = 0.6
# binary_crossentropy
loss_binary_crossentropy = tf.keras.losses.binary_crossentropy(y_true, y_pred)
# custom_loss
loss_custom = some_custom_loss(y_true, y_pred))
return part_binary_crossentropy * loss_binary_crossentropy + part_custom * loss_custom
model.compile(loss=joint_loss, optimizer='Adam')