Как найти количество ненулевых в массиве Keras - PullRequest
1 голос
/ 21 апреля 2019

Я пытаюсь найти количество нулей в пользовательской функции потерь для Кераса.

def root_mean_squared_error(y_true, y_pred):

Где эта функция потерь вводится здесь:

model.compile(optimizer=sgd,
          loss=root_mean_squared_error,
          metrics=[metrics.mse, root_mean_squared_error])

Я пытаюсь найти количество ненулевых значений в массиве "y_true" и разделить мое число на это значение.

Как узнать количество ненулевых элементов в y_true?

Ответы [ 2 ]

3 голосов
/ 21 апреля 2019

Вы можете использовать API tf.count_nonzero через бэкэнд Keras.

from keras import backend as K
import numpy as np

def custom_loss(y_true, y_pred):
    return y_pred / K.cast(K.tf.count_nonzero(y_true), K.tf.float32)

y_t = K.placeholder((1,2))
y_p = K.placeholder((1,2))
loss = custom_loss(y_t, y_p)
print(K.get_session().run(loss, {y_t: np.array([[1,1]]), y_p: np.array([[2,4]])}))

[[1.2.]]

1 голос
/ 21 апреля 2019

Возможно, вы можете использовать логическое условие y_true != 0 с массивом NumPy:

z = np.array( y_true != 0 )
# Check the shape of z array.
print( z.shape )
count = z.shape[ 0 ]

Здесь count должен быть числом элементов, для которых условие y_true != 0 выполняется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...