私はタイムステップの平均を計算し、マスキングをサポートするLayerを持っています。 私の問題は、マスクが空である(パディングされたタイムステップはない)場合がありますが、テンソルを扱うときにゼロをチェックする方法がわからないことです。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)
はゼロとなります。これを回避するためにinput_lengthを増やして、すべてのトレーニングの例をカバーしていますが、これは解決策ではありません。また、try/exceptを追加しようとしましたが、これもうまくいきませんでした。