Как добавить n-мерную константу Тензор в вывод моей модели в Керасе? - PullRequest
1 голос
/ 04 июля 2019

моя модель принимает пакет изображений в качестве входных данных и выводит настроенную серию изображений.Во время предварительной обработки средние значения пикселей 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
...