两个分类交叉熵之间的凸组合
Convex Combination between two Categorical cross entropy
我正在尝试使用分类交叉熵在 Keras 中计算自定义损失函数。
我想为两个输出创建一个独特的损失函数(我的网络有 1 个输入和 2 个输出),即:
L= lambda*L1+(1-lambda)*L2
其中 lambda 介于 0 和 1 之间,L1 是第一个输出的分类损失熵,第二个输出的 L2...
我这样试过:
def my_loss(y_true, y_pred):
final_loss = (0.8*(losses.binary_crossentropy(y_true[:, 0], y_pred[:, 0])+(0.2)*( losses.categorical_crossentropy(y_true[:, 1:], y_pred[:,1:]))))
return final_loss
然后:
model.compile(optimizer='Adam', loss=[my_loss],metrics=[metrics.categorical_accuracy])
但第一个问题是我仍然传递了损失函数的2倍,我不知道它是否正确;另外,我无法将 lambda 传递给 my_loss。
我该怎么办?
我认为您需要的一切在 keras 中都有
inp = Input((10))
x = Dense(32)(inp)
out1 = Dense(1, activation='sigmoid', name='out1')(x)
out2 = Dense(1, activation='sigmoid', name='out2')(x)
m = Model(inp, [out1, out2])
alpha = 0.3
m.compile('adam', loss={'out1':'binary_crossentropy', 'out2':'binary_crossentropy'},
loss_weights={'out1':alpha,'out2':1-alpha})
X = np.random.uniform(0,1, (1000,10))
y1 = np.random.uniform(0,1, 1000)
y2 = np.random.uniform(0,1, 1000)
m.fit(X, [y1,y2], epochs=10)
您可以定义具有多个输出和多个损失的模型
最后的损失是你提供的损失之间的加权平均损失...loss = out1_loss * alpha + out2_loss * (1-alpha)
我正在尝试使用分类交叉熵在 Keras 中计算自定义损失函数。 我想为两个输出创建一个独特的损失函数(我的网络有 1 个输入和 2 个输出),即:
L= lambda*L1+(1-lambda)*L2
其中 lambda 介于 0 和 1 之间,L1 是第一个输出的分类损失熵,第二个输出的 L2... 我这样试过:
def my_loss(y_true, y_pred):
final_loss = (0.8*(losses.binary_crossentropy(y_true[:, 0], y_pred[:, 0])+(0.2)*( losses.categorical_crossentropy(y_true[:, 1:], y_pred[:,1:]))))
return final_loss
然后:
model.compile(optimizer='Adam', loss=[my_loss],metrics=[metrics.categorical_accuracy])
但第一个问题是我仍然传递了损失函数的2倍,我不知道它是否正确;另外,我无法将 lambda 传递给 my_loss。
我该怎么办?
我认为您需要的一切在 keras 中都有
inp = Input((10))
x = Dense(32)(inp)
out1 = Dense(1, activation='sigmoid', name='out1')(x)
out2 = Dense(1, activation='sigmoid', name='out2')(x)
m = Model(inp, [out1, out2])
alpha = 0.3
m.compile('adam', loss={'out1':'binary_crossentropy', 'out2':'binary_crossentropy'},
loss_weights={'out1':alpha,'out2':1-alpha})
X = np.random.uniform(0,1, (1000,10))
y1 = np.random.uniform(0,1, 1000)
y2 = np.random.uniform(0,1, 1000)
m.fit(X, [y1,y2], epochs=10)
您可以定义具有多个输出和多个损失的模型
最后的损失是你提供的损失之间的加权平均损失...loss = out1_loss * alpha + out2_loss * (1-alpha)