我想在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'。所有你需要的就是给它**噪音**作为预期的结果,而不是给它一个干净的图像。 –
在我的答案中查看更新。 –