Https://github.com/keras-team/keras/issues/2115 এ সমাধানটিতে যুক্ত করা হচ্ছে । আপনার যদি শ্রেণি ওজনের চেয়ে বেশি প্রয়োজন যেখানে আপনি মিথ্যা ধনাত্মক এবং মিথ্যা নেতিবাচক জন্য বিভিন্ন ব্যয় চান। নতুন কেরাস সংস্করণটি দিয়ে এখন আপনি নীচের বর্ণিত ক্ষতি সম্পর্কিত ফাংশনটিকে ওভাররাইড করতে পারেন। নোট যে weights
একটি বর্গ ম্যাট্রিক্স।
from tensorflow.python import keras
from itertools import product
import numpy as np
from tensorflow.python.keras.utils import losses_utils
class WeightedCategoricalCrossentropy(keras.losses.CategoricalCrossentropy):
def __init__(
self,
weights,
from_logits=False,
label_smoothing=0,
reduction=losses_utils.ReductionV2.SUM_OVER_BATCH_SIZE,
name='categorical_crossentropy',
):
super().__init__(
from_logits, label_smoothing, reduction, name=f"weighted_{name}"
)
self.weights = weights
def call(self, y_true, y_pred):
weights = self.weights
nb_cl = len(weights)
final_mask = keras.backend.zeros_like(y_pred[:, 0])
y_pred_max = keras.backend.max(y_pred, axis=1)
y_pred_max = keras.backend.reshape(
y_pred_max, (keras.backend.shape(y_pred)[0], 1))
y_pred_max_mat = keras.backend.cast(
keras.backend.equal(y_pred, y_pred_max), keras.backend.floatx())
for c_p, c_t in product(range(nb_cl), range(nb_cl)):
final_mask += (
weights[c_t, c_p] * y_pred_max_mat[:, c_p] * y_true[:, c_t])
return super().call(y_true, y_pred) * final_mask