Python 函数的输入张量必须来自“tf.keras.Input”。收到:0(缺少上一层元数据),无法找到原因

Python 函数的输入张量必须来自“tf.keras.Input”。收到:0(缺少上一层元数据),无法找到原因,python,tensorflow,keras,Python,Tensorflow,Keras,我得到一个ValueError错误:函数的输入张量必须来自tf.keras.Input。收到:0(缺少上一层元数据),我找不到原因 这是我的错误跟踪和代码 --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-inpu

我得到一个ValueError错误:函数的输入张量必须来自
tf.keras.Input
。收到:0(缺少上一层元数据),我找不到原因

这是我的错误跟踪和代码

    ---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-15-8058f3a2fd50> in <module>()
      6   test_loss, test_accuracy = eg.test(dg.user_test)
      7   print('Test set: Loss=%.4f ; Accuracy=%.1f%%' % (test_loss, test_accuracy * 100))
----> 8   eg.save_embeddings('embeddings.csv')

7 frames
<ipython-input-5-54ff9897b1c3> in save_embeddings(self, file_name)
     66     inp = self.m.input                                           # input placeholder
     67     outputs = [layer.output for layer in self.m.layers]          # all layer outputs
---> 68     functor = K.function([inp, K.learning_phase()], outputs )   # evaluation function
     69 
     70     #append embeddings to vectors

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/backend.py in function(inputs, outputs, updates, name, **kwargs)
   3934     from tensorflow.python.keras import models  # pylint: disable=g-import-not-at-top
   3935     from tensorflow.python.keras.utils import tf_utils  # pylint: disable=g-import-not-at-top
-> 3936     model = models.Model(inputs=inputs, outputs=outputs)
   3937 
   3938     wrap_outputs = isinstance(outputs, list) and len(outputs) == 1

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py in __new__(cls, *args, **kwargs)
    240       # Functional model
    241       from tensorflow.python.keras.engine import functional  # pylint: disable=g-import-not-at-top
--> 242       return functional.Functional(*args, **kwargs)
    243     else:
    244       return super(Model, cls).__new__(cls, *args, **kwargs)

/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/tracking/base.py in _method_wrapper(self, *args, **kwargs)
    455     self._self_setattr_tracking = False  # pylint: disable=protected-access
    456     try:
--> 457       result = method(self, *args, **kwargs)
    458     finally:
    459       self._self_setattr_tracking = previous_value  # pylint: disable=protected-access

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/functional.py in __init__(self, inputs, outputs, name, trainable)
    113     #     'arguments during initialization. Got an unexpected argument:')
    114     super(Functional, self).__init__(name=name, trainable=trainable)
--> 115     self._init_graph_network(inputs, outputs)
    116 
    117   @trackable.no_automatic_dependency_tracking

/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/tracking/base.py in _method_wrapper(self, *args, **kwargs)
    455     self._self_setattr_tracking = False  # pylint: disable=protected-access
    456     try:
--> 457       result = method(self, *args, **kwargs)
    458     finally:
    459       self._self_setattr_tracking = previous_value  # pylint: disable=protected-access

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/functional.py in _init_graph_network(self, inputs, outputs)
    142       base_layer_utils.create_keras_history(self._nested_outputs)
    143 
--> 144     self._validate_graph_inputs_and_outputs()
    145 
    146     # A Network does not create weights of its own, thus it is already

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/functional.py in _validate_graph_inputs_and_outputs(self)
    637                          'must come from `tf.keras.Input`. '
    638                          'Received: ' + str(x) +
--> 639                          ' (missing previous layer metadata).')
    640       # Check that x is an input tensor.
    641       # pylint: disable=protected-access

ValueError: Input tensors to a Functional must come from `tf.keras.Input`. Received: 0 (missing previous layer metadata).
这是调用save_embeddings方法的代码部分

if True: # Generate embeddings?
  eg = EmbeddingsGenerator(dg.user_train, pd.read_csv('ml-100k/u.data', sep='\t', names=['userId', 'itemId', 'rating', 'timestamp']))
  eg.train(nb_epochs=300)
  train_loss, train_accuracy = eg.test(dg.user_train)
  print('Train set: Loss=%.4f ; Accuracy=%.1f%%' % (train_loss, train_accuracy * 100))
  test_loss, test_accuracy = eg.test(dg.user_test)
  print('Test set: Loss=%.4f ; Accuracy=%.1f%%' % (test_loss, test_accuracy * 100))
  eg.save_embeddings('embeddings.csv')

你可以在这里找到解决办法
if True: # Generate embeddings?
  eg = EmbeddingsGenerator(dg.user_train, pd.read_csv('ml-100k/u.data', sep='\t', names=['userId', 'itemId', 'rating', 'timestamp']))
  eg.train(nb_epochs=300)
  train_loss, train_accuracy = eg.test(dg.user_train)
  print('Train set: Loss=%.4f ; Accuracy=%.1f%%' % (train_loss, train_accuracy * 100))
  test_loss, test_accuracy = eg.test(dg.user_test)
  print('Test set: Loss=%.4f ; Accuracy=%.1f%%' % (test_loss, test_accuracy * 100))
  eg.save_embeddings('embeddings.csv')