如何在Keras中的模型输出中添加n维常数张量?

时间:2019-07-04 12:39:30

标签: python keras keras-layer

我的模型将一批图像作为输入并输出定制的一批图像。在预处理期间,从每个通道中减去VGG-16平均像素值。由于进一步处理,这是必需的。为了评估结果,我想在模型的末尾添加一个自定义图层,以获得视觉效果。因此,该层需要再次添加相减的值。

到目前为止,我想使用包装函数的Lambda层。在此函数中,我尝试堆叠三个恒定张量,以便将此3D张量添加到输出中。我在这里面临的问题是我不知道批处理大小,图像大小以及常量张量不接受“无”作为形状输入。如何使此函数适合任意输入。基本上我想做的是:

    mean = [103.939, 116.779, 123.68]
    x[..., 0] += mean[0]
    x[..., 1] += mean[1]
    x[..., 2] += mean[2]

代码:

    model_inp = Input(shape = (None , None , channels) , name='input')
        model_output = Conv2D(filters = 64, kernel_size = (9,9),padding ='same', activation ='relu', kernel_initializer= 'RandomNormal' )(model_inp)
    model_output = Conv2D(filters = 32, kernel_size = (1,1),padding ='same', activation ='relu', kernel_initializer= 'RandomNormal' )(model_output)
    model_output = Conv2D(filters = 3, kernel_size = (5,5),padding ='same', activation ='linear', kernel_initializer= 'RandomNormal', name = 'output')(model_output)
    model_output_fin = Lambda(self.vgg_postprocessing)(model_output)



    def vgg_postprocessing(self, x):
        mean = [103.939, 116.779, 123.68]

        B = K.constant(mean[0], shape=(None,None,None,1))
        G = K.constant(mean[1], shape=(None,None,None,1))
        R = K.constant(mean[2], shape=(None,None,None,1))

        tens = K.stack([B,G,R],axis=3)
        x += tens
        return x

0 个答案:

没有答案
相关问题