моя модель принимает пакет изображений в качестве входных данных и выводит настроенную серию изображений.Во время предварительной обработки средние значения пикселей VGG-16 вычитаются из каждого канала.Это необходимо из-за дальнейшей обработки.Чтобы оценить результаты, я хочу добавить пользовательский слой в конце модели, чтобы получить визуальные результаты.Поэтому этому слою нужно снова добавить вычтенные значения.
До сих пор я хотел использовать лямбда-слой, который оборачивает функцию.В этой функции я попытался сложить три постоянных тензора, чтобы добавить этот трехмерный тензор в вывод.Проблема, с которой я здесь сталкиваюсь, заключается в том, что я не знаю ни размера пакета, ни размера изображения, а константы-тензоры не принимают None в качестве записей формы.Как я могу сделать эту функцию подходящей для произвольного ввода.В основном я хочу, чтобы:
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