私はKerasでConvNetをノイズ除去するイメージを作成しようとしています。私自身の損失関数を作成したいと思います。私はそれが入力として騒々しいイメージを取り、出力としてノイズを得ることを望みます。この損失関数はMSEの損失によく似ていますが、私のネットワークは入力ノイズの多い画像から雑音ではなくクリーンな画像を除去することを学びます。私は自分自身が、私でそれを作るしようとしたKerasでカスタムMSE損失関数を書く
:
私はYでノイズの多い画像を実装する損失関数は、クリーンなイメージとR(y)の予測画像をxはすべての時間が変わるので、私の騒々しいイメージへの損失アクセスをどのようにするかわからない。
def residual_loss(noisy_img):
def loss(y_true, y_pred):
return np.mean(np.square(y_pred - (noisy_img - y_true), axis=-1)
return loss
基本的には、このような何か私は何をする必要がある:
input_img = Input(shape=(None,None,3))
c1 = Convolution2D(64, (3, 3))(input_img)
a1 = Activation('relu')(c1)
c2 = Convolution2D(64, (3, 3))(a1)
a2 = Activation('relu')(c2)
c3 = Convolution2D(64, (3, 3))(a2)
a3 = Activation('relu')(c3)
c4 = Convolution2D(64, (3, 3))(a3)
a4 = Activation('relu')(c4)
c5 = Convolution2D(3, (3, 3))(a4)
out = Activation('relu')(c5)
model = Model(input_img, out)
model.compile(optimizer='adam', loss=residual_loss(input_img))
しかし、私はこれをしようとすると、私が手:
IndexError: tuple index out of range
私は何ができますか?それは(それはそのためのものではないです)損失関数の「入力」を使用するのは非常に珍しいので
ありがとうございました!私は損失関数についてあなたが言ったことに同意しますが、私のnoisy_imgと私のpredict_imgの違いを計算する古典的なMSEを使用している場合、私のモデルはこの違いを最小限に抑えようとします。ノイズを除去するには?したがって、私のモデルの出力でノイズを得るために私のモデルでnoisy_imgからclean_imgを削除したい場合は、上記のような損失関数を使用する必要がありますか? –
いいえ、あなたのモデルは、あなたが 'y_training'として与えるものを正確に達成しようとします。これは、損失関数の中で' y_true'です。あなたが必要とするのは、それにきれいな画像を与えるのではなく、**ノイズ**を期待した結果として与えることだけです。 –
私の答えの更新を見てください。 –