如何在模型构建过程中改变keras张量的形状?

时间:2018-06-04 22:20:24

标签: keras

我有一个自动编码器模型,如下所示:

input_img = Input(shape=(128, 128, 1))  
x = Conv2D(...)(input_img)
x = MaxPooling2D(...)(x)
...
out = Conv2D(1, (3, 3), activation='sigmoid')(x)
my_model = Model(input_img, decoded)
my_model.compile(optimizer='adadelta', loss=my_custom_loss)

目前,out的形状与input_img相同,假设为(None, 128, 128, 1)。我想操纵out来塑造(None, 128, 128, 2)。额外块的内容无关紧要。

如果有人想知道我为什么要这样做:这是因为我打算在基础事实值y_true中有一些额外的信息,以便我可以定义一个特定的成本函数my_custom_loss。为了做到这一点,似乎out的形状在定义成本函数时必须与y_true的形状匹配...

1 个答案:

答案 0 :(得分:1)

如果内容真的无关紧要,可以用零填充。它可能看起来像:

zeros = Lambda(lambda x: K.zeros_like(x))(out) # (None, 128, 128, 1)
out = Concatenate([out, zeros]) # (None, 128, 128, 2)

确保忽略要添加的额外填充。