私はDLとKerasを初めて使用しており、現在Kerasでソベルフィルタベースのカスタム損失関数を実装しようとしています。Kerasを使用してカスタムソベルフィルタベースの損失関数を実装する方法
考え方は、ソーベルフィルタリングされた予測とソーベルフィルタリングされたグランドトゥルース画像の平均二乗損失を計算することです。
これまでのところ、私のカスタム損失関数は次のようになります。この損失関数を使用して
from scipy import ndimage
def mse_sobel(y_true, y_pred):
for i in range (0, y_true.shape[0]):
dx_true = ndimage.sobel(y_true[i,:,:,:], 1)
dy_true = ndimage.sobel(y_true[i,:,:,:], 2)
mag_true[i,:,:,:] = np.hypot(dx_true, dy_true)
mag_true[i,:,:,:] *= 1.0/np.max(mag_true[i,:,:,:])
dx_pred = ndimage.sobel(y_pred[i,:,:,:], 1)
dy_pred = ndimage.sobel(y_pred[i,:,:,:], 2)
mag_pred[i,:,:,:] = np.hypot(dx_pred, dy_pred)
mag_pred[i,:,:,:] *= 1.0/np.max(mag_pred[i,:,:,:])
return(K.mean(K.square(mag_pred - mag_true), axis=-1))
は、このエラーにつながる:私はy_true.shape
だけNone
を返すこと、が分かったデバッガを使用して
in mse_sobel
for i in range (0, y_true.shape[0]):
TypeError: __index__ returned non-int (type NoneType)
- 大丈夫。私はこのfor i in range (0,1):
のように見えるようにした例1
ためにy_true.shape
を交換する場合でも、別のエラーが発生します。
in sobel
axis = _ni_support._check_axis(axis, input.ndim)
in _check_axis
raise ValueError('invalid axis')
ValueError: invalid axis
をここで、私は軸が無効であると思われる理由がわからないのですか?
誰も私がその損失機能を実装する方法を理解するのに役立つことができますか? ありがとうございました!
うわー、どのような完璧な答え/解決策。ご協力いただきありがとうございます。 –