小编Nat*_*ens的帖子

在 Keras 中编写自定义 MSE 损失函数

我正在尝试在 Keras 中创建图像去噪 ConvNet,并且我想创建自己的损失函数。我希望它将噪声图像作为输入并将噪声作为输出。这个损失函数非常类似于 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
Run Code Online (Sandbox Code Playgroud)

基本上,我需要做的是这样的:

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))
Run Code Online (Sandbox Code Playgroud)

但如果我尝试这个,我会得到:

 IndexError: tuple …
Run Code Online (Sandbox Code Playgroud)

python loss mse python-2.7 keras

3
推荐指数
1
解决办法
7058
查看次数

在Keras中更改输入大小

我已经用Keras训练了一个全卷积神经网络。我使用了Functional API,并将输入层定义为Input(shape=(128,128,3)),与我的训练集中的图像大小相对应。

但是,我想在可变大小的图像上使用经过训练的模型(应该可以,因为网络是完全卷积的)。为此,我需要将输入层更改为Input(shape=(None,None,3))。解决问题的明显方法是直接使用输入形状训练我的模型,(None,None,3)但是我使用自定义损失函数来指定训练图像的大小。

我试图定义一个新的输入层,并将其分配给我的模型,如下所示:

from keras.engine import InputLayer

input_layer = InputLayer(input_shape=(None, None, 3), name="input")
model.layers[0] = input_layer
Run Code Online (Sandbox Code Playgroud)

实际上,这实际上会更改输入层的大小,但随后的层仍然需要(128,128,filters)输入。

有没有办法一次更改所有输入值?

python neural-network deep-learning keras

3
推荐指数
1
解决办法
1574
查看次数

标签 统计

keras ×2

python ×2

deep-learning ×1

loss ×1

mse ×1

neural-network ×1

python-2.7 ×1