現在、1次元波形データを分類するCNNに用いるGrad-CAMを自作しており、出力層の値class_outputと畳み込み層の最後の層conv_lastに対してgrad = keras.backend.gradients(class_output, conv_last)[0]として勾配を取得しました。
しかし、ある波形に対しては勾配が求まるものの、別の波形に対しては勾配がすべて0となってしまう問題が発生しています。
エラーは吐かれず、200波形につき100個の割合でこの問題が発生しています。
ちなみに、別の学習モデルに適用した場合は、上記のモデルで出力できていた波形に対しても勾配が0になってしまったり、その逆もあったりと統一性がありません。

https://github.com/keras-team/keras/issues/12125
この問題と同様の状況だと思われます。何か考えのある方はコメントいただければ幸いです。