keras
keras copied to clipboard
Tendorflow metric per class issue
With Tensorflow 2.9 on Ubuntu 18.04, to evaluate the ai model performance per class, I would like to calculate the Accuracy per class. But during training, the metric value is the same for all classes. But this common value is different from each class accuracy value when I run the training with only one output metric. I have tested independently my custom metric function and it provides different values for each class. Consequently, I am guessing there is a memory share. Could you advise how I can modify my code ? Do you have any advise ? Thanks
In the File A :
[class_metrics = MetricsPerClass(classes=self.classes) metrics_list = list(class_metrics.metrics_dict.values()) metrics = self.segmentation_metricloss_prefixe_name: metrics_list}] In file B :
class MetricsPerClass(tf.keras.metrics.Metric): def init(self, name='MetricsPerClass', classes=["Class1", "Class2", "Class3", "Class4", "Class5", "Class6", "Class7"], **kwargs):
super(MetricsPerClass, self).__init__(name=name, **kwargs)
self.classes = classes
for i, _ in enumerate(self.classes):
name = self.classes[i]
self.metrics_dict[name] = tf.keras.metrics.Accuracy(name=name)
def reset_states(self):
for metric in self.metrics_dict.values():
metric.reset_states()
def update_state(self, y_true, y_pred):
lbls = tf.argmax(tf.reshape(y_true, [-1, len(self.classes)]), 1)
preds = tf.argmax(tf.reshape(y_pred, [-1, len(self.classes)]), 1)
for i, class_name in enumerate(self.classes):
in_c = tf.equal(lbls, i)
with tf.name_scope(class_name):
class_metric_acc = tf.keras.metrics.Accuracy(lbls, preds, name=class_name, sample_weight=in_c)
self.metrics_dict[class_name] = class_metric_acc
def result(self):
results = {}
for name, metric in self.metrics_dict.items():
results[name] = metric.result().numpy()
return results
Could you pease provide sample reproducible code? Since you're using older TensorfFlow version, could you please update it to the latest version and try again. You can use Keras 3 to import keras directly. For more details, visit https://keras.io/guides/migrating_to_keras_3/
This issue is stale because it has been open for 14 days with no activity. It will be closed if no further activity occurs. Thank you.
This issue was closed because it has been inactive for 28 days. Please reopen if you'd like to work on this further.