如何在keras模型中嵌入人工损失函数



我有一个期望的损失函数为:

one_weight = (1-num_of_ones)/(num_of_ones + num_of_zeros)
zero_weight = (1-num_of_zeros)/(num_of_ones + num_of_zeros)
def weighted_binary_crossentropy(zero_weight, one_weight):
def weighted_binary_crossentropy(y_true, y_pred):    
b_ce = K.binary_crossentropy(y_true, y_pred)    
# weighted calc
weight_vector = y_true * one_weight + (1 - y_true) * zero_weight
weighted_b_ce = weight_vector * b_ce   
return K.mean(weighted_b_ce)
return weighted_binary_crossentropy

我试图在我的模型中使用这个损失函数,它是:

model = Sequential()
model.add(BatchNormalization())
model.add(Conv2D(16, kernel_size=(32,1),strides=(1,1), activation='relu', input_shape=(78,64,1)))
model.add(Conv2D(16, kernel_size=(1,10),strides=(1,10), activation='relu'))
model.add(BatchNormalization())
model.add(ReLU(max_value=None))
model.add(Dropout(0.2))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(2, activation='sigmoid'))

model.compile(optimizer=opt, loss =  weighted_binary_crossentropy , metrics = ['acc'] )
history = model.fit(Train_Data, Train_labels, batch_size =20, epochs = 450, shuffle = True , validation_data = (Val_Data, Val_labels))

我的问题是,损失函数需要一个输入是y_pred(由模型预测的测试数据的标签)。通过我想要的损失函数训练模型后,可以获得y_pred,但损失函数在训练模型时需要y_pred

另一方面,我可以说:我使用损失函数来训练我的模型,但它给出了错误,因为没有y_pred将其用作损失函数的输入。

在开始训练过程之前,我如何使用我想要的损失函数来训练模型,而我没有y_pred?注意,我还有其他需要的损失函数参数。

将自己的参数传递给weighted_binary_crossentropy。这个函数返回内部包装函数(weighted_binary_crossentropy),它接受y_truey_pred,你不需要对它做任何事情。

model.compile(optimizer=opt, 
loss=weighted_binary_crossentropy(zero_weight,one_weight),
metrics=['acc'])

相关内容

  • 没有找到相关文章

最新更新