Я пытаюсь построить модель с Keras, которая использует метри c: специальный показатель f1. Я борюсь с его реализацией.
Пока у меня есть:
def f1_metric(y_true,y_pred):
y_pred = K.one_hot(indices=K.argmax(y_pred,1), num_classes=4)
arr = np.zeros((4,4))
for pred,true in zip(y_pred,y_true):
c_pred = K.constant(K.argmax(pred))
c_true = K.constant(K.argmax(true))
arr[c_true][c_pred] += 1
fn = 2*arr[0][0]/(np.sum(arr[0]) + np.sum(arr.T[0])) if (np.sum(arr[0]) + np.sum(arr.T[0])) != 0 else 0
fa = 2*arr[1][1]/(np.sum(arr[1]) + np.sum(arr.T[1])) if (np.sum(arr[1]) + np.sum(arr.T[1])) != 0 else 0
fo = 2*arr[2][2]/(np.sum(arr[2]) + np.sum(arr.T[2])) if (np.sum(arr[2]) + np.sum(arr.T[2])) != 0 else 0
fp = 2*arr[3][3]/(np.sum(arr[3]) + np.sum(arr.T[3])) if (np.sum(arr[3]) + np.sum(arr.T[3])) != 0 else 0
return K.constant((fn + fa + fo + fp)/4)
При использовании функции f1_metric
появляется следующая ошибка: OperatorNotAllowedInGraphError: iterating over `tf.Tensor` is not allowed
Я понимаю, что циклы не может быть использован. Я уже некоторое время читаю, но все еще не могу найти альтернативу.
Как я могу правильно применить мой для l oop?