Keras Custom Layer: у объекта 'Node' нет атрибута 'output_masks' - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь создать собственный слой с Keras с бэкэндом Tensorflow для обработки изображений.

Процесс не выполняется при использовании Keras, но работает с тензорным потоком (частично).

Чтобы лучше понять проблему, я реализовал слой Identity и имел ту же проблему:

Объект «Узел» не имеет атрибута «output_masks»

Вот мой код:

from tensorflow.python.keras.layers import *
from tensorflow.python.keras import Model
from tensorflow.python.keras import  optimizers

import cv2

from keras.engine.topology import Layer # This Layer does not work

#
# USE KERAS IMPLEMENTED INTO TENSORFLOW TO MAKE IT WORK
#

#from tensorflow.python.keras._impl.keras.engine.base_layer import Layer

import numpy as np


class Identity(Layer):

    def __init__(self, **kwargs):

        super(Identity, self).__init__(**kwargs)

    def build(self, input_shape):

        super(Identity, self).build(input_shape)  # Be sure to call this somewhere!


    def call(self, x):

        return x


    def compute_output_shape(self, input_shape):

        return tuple(input_shape)




height = 12
width = 18
channels = 3

image_original = cv2.imread("./predict_base.png")
input_data = np.zeros((2, 12, 18, 3))
input_data[0] = image_original
input_data[1] = image_original

input_shape = (height, width, channels)

input = Input(shape=input_shape)
output = Identity()(input)

# add the model on top of the convolutional base
model = Model(inputs=input, outputs=output)

adam = optimizers.Adam()
model.compile(loss='mean_squared_error', optimizer=adam)

model.summary()
image = model.predict(input_data)

cv2.imshow("result", image[0])
cv2.waitKey(0)

В то время как более сложный слой работает с использованием прямого тензорного потока, он не может правильно вычислить выходную форму.

Если я внесу ошибку в вычисление выходной формы, например:

def compute_output_shape(self, input_shape):
    output_shape = []
    output_shape[0] = input_shape[0]
    output_shape[1] = input_shape[1]
    output_shape[2] = input_shape[2]
    output_shape[3] = 4               #Here is the error I added

    return tuple(output_shape)

Форма вывода все та же, тензор потока не вычисляет вывод правильно.

У вас есть идеи, как это исправить?

Большое спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...