У меня есть Layer, который вычисляет среднее значение timesteps и поддерживает маскировку. Моя проблема в том, что может быть так, что маска пуста (без добавленных временных меток), но я не знаю, как проверить нули при работе с тензорами.Keras - Theano - Тест для деления на ноль
У меня есть несколько примеров обучения, для которых маска пуста, поэтому я получаю потерю NaN и программа вылетает.
Это мой слой:
class MeanOverTime(Layer):
def __init__(self, **kwargs):
self.supports_masking = True
super(MeanOverTime, self).__init__(**kwargs)
def call(self, x, mask=None):
if mask is not None:
return K.cast(x.sum(axis=1)/mask.sum(axis=1, keepdims=True), K.floatx()) # this may result to division by zero
else:
return K.mean(x, axis=1)
def get_output_shape_for(self, input_shape):
return input_shape[0], input_shape[-1]
def compute_mask(self, input, input_mask=None):
return None
Это mask.sum(axis=1, keepdims=True)
становится равным нулю. Чтобы обойти это, я увеличил длину ввода, поэтому он охватывает все мои учебные примеры, но это не решение. Также я попытался добавить try/except, но это также не сработало.