ValueError: Выходные тензоры в модель должны быть выходными данными TensorFlow `Layer` (таким образом, удерживая метаданные прошлого слоя). - PullRequest
0 голосов
/ 22 октября 2018

Обнаружение ошибки с использованием функционального API-интерфейса keras из TensorFlow.Слои хорошо компилируются, пока я не попытаюсь инициировать объект Model (tf.keras.Model), и в этот момент я получаю приведенную ниже ошибку и трассировку.

Последняя оболочка слоя находится ниже:

def dense(self,kwargs):
    print('simple old Dense layer')
    self.layer_outputs[kwargs['LayerID']] = tf.keras.layers.Lambda(tf.layers.Dense(name=self._namer(kwargs['LayerID']), **kwargs['LayerKwargs']))(self.layer_outputs[kwargs['LayerInput']])
    if kwargs['args'].setdefault('norm',True):
        self.layer_outputs[kwargs['LayerID']] = self.batchnorm_relu(self.layer_outputs[kwargs['LayerID']],kwargs['LayerID'])
    return self.layer_outputs[kwargs['LayerID']]

Я рассмотрел другие вопросы, касающиеся подобных ошибок, здесь , здесь и здесь .Все эти проблемы были решены либо путем исправления ввода, либо оборачивания вывода в оболочку слоя keras.Lambda, которая, похоже, не работает для меня.

Мой ввод ниже:

self.input_proxy = tf.keras.layers.Input(shape=self.batch_input_shape[1:],dtype=tf.float32)

Один ответ, который я еще не попробовал, это здесь , в котором я бы назначил недостающие реквизиты meta_data вручную.Это может сработать, но кажется ужасно хакерским, и я бы хотел более простое решение, которое работает с API, если это возможно.

Почему это происходит и как я могу его решить?

   C:\Users\asus\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\keras\engine\training.py in __init__(self, *args, **kwargs)
        115
        116   def __init__(self, *args, **kwargs):
    --> 117     super(Model, self).__init__(*args, **kwargs)
        118     # Create a cache for iterator get_next op.
        119     self._iterator_get_next = weakref.WeakKeyDictionary()

    C:\Users\asus\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\keras\engine\network.py in __init__(self, *args, **kwargs)
         78         'inputs' in kwargs and 'outputs' in kwargs):
         79       # Graph network
    ---> 80       self._init_graph_network(*args, **kwargs)
         81     else:
         82       # Subclassed network

    C:\Users\asus\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\training\checkpointable\base.py in _method_wrapper(self, *args, **kwargs)
        424     self._setattr_tracking = False  # pylint: disable=protected-access
        425     try:
    --> 426       method(self, *args, **kwargs)
        427     finally:
        428       self._setattr_tracking = previous_value  # pylint: disable=protected-access

    C:\Users\asus\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\keras\engine\network.py in _init_graph_network(self, inputs, outputs, name)
        222         raise ValueError('Output tensors to a ' + cls_name + ' must be '
        223                          'the output of a TensorFlow `Layer` '
    --> 224                          '(thus holding past layer metadata). Found: ' + str(x))
        225
        226     self._base_init(name=name)

    ValueError: Output tensors to a Model must be the output of a TensorFlow `Layer` (thus holding past layer metadata). Found: Tensor("lambda/Last__0/BiasAdd:0",
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...