Обнаружение ошибки с использованием функционального 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",