我想为categorical_crossentropy损失添加一个因素。与参考相比,它将描述y_pred的类分布。简化示例:
y_ref = [5,45,30,20]
y_pred = [10,40,20]
factor = 10
目前,我仅将此因子用作指标。我对训练数据进行了预测,以验证该因素的准确性。该值不正确。
我试图返回totalsum_pred,它应该是y_pred中的样本数。但是,class_f和val_class_f不是整数(例如31.9701)。我没有使用批处理或正则化。
出什么问题了?
def class_f(y_true,y_pred):
ref_rate = K.cast([0.05,0.45,0.30,0.20],dtype='float32')
pred_cast = K.cast(y_pred,dtype='float32')
pred_argmax = K.argmax(pred_cast,axis=1)
pred_onehot = K.one_hot(pred_argmax,4)
sum_pred = K.sum(pred_onehot,axis=0)
totalsum_pred = K.sum(pred_onehot)
norm_sum_pred = K.cast(sum_pred / totalsum_pred,dtype='float32')
class_factor = K.sum(K.abs(ref_rate-norm_sum_pred))
return class_factor
model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=[class_f])