我想在Keras中創建一個圖像去噪ConvNet,我想創建自己的丟失函數。我希望它將噪聲圖像作爲輸入,並將噪聲作爲輸出。這種丟失功能與MSE丟失非常相似,但這會使我的網絡學會去除乾淨的圖像,而不是來自輸入噪聲圖像的噪聲。在Keras寫一個自定義的MSE丟失函數
損失函數我想和y以實現嘈雜的圖像,X乾淨的形象和R(Y)的預測圖像:
我試着通過我自己,但我要使它不知道如何讓損失訪問我嘈雜的圖像,因爲它一直在變化。
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'。所有你需要的就是給它**噪音**作爲預期的結果,而不是給它一個乾淨的圖像。 –
在我的答案中查看更新。 –