我的模型将一批图像作为输入并输出定制的一批图像。在预处理期间,从每个通道中减去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