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

Python ValueError:函数的输入张量必须来自“tf.keras.Input”。接收到:0(缺少上一层元数据),python,keras,tensorflow2.0,Python,Keras,Tensorflow2.0,我正在尝试使用确定点过程进行主动学习,我使用的是包model。以下代码是确定点过程的代码: from scipy.spatial.distance import pdist, squareform from scipy.linalg import inv, norm, sqrtm import scipy def sample(D, V, E=None, k=None, flag_gpu=False): N = D.shape[0] if k is None:

我正在尝试使用确定点过程进行主动学习,我使用的是包
model
。以下代码是确定点过程的代码:

from scipy.spatial.distance import pdist, squareform
from scipy.linalg import inv, norm, sqrtm
import scipy 

def sample(D, V, E=None, k=None, flag_gpu=False):
    N = D.shape[0]
    if k is None:
        # general dpp
        D = D / (1 + D)
        V = V[:,np.random.rand(N) < D]
        k = V.shape[1]
    else:
        # k-dpp
        v_idx = sample_k(D, E, k, flag_gpu=flag_gpu)
        V = V[:,v_idx]

    rst = list()

    for i in range(k-1,-1,-1):
        # choose indices

        P = np.sum(V**2, axis=1)

        row_idx = np.random.choice(range(N), p=P/np.sum(P))
        col_idx = np.nonzero(V[row_idx])[0][0]

        rst.append(row_idx)

        # update V
        V_j = np.copy(V[:,col_idx])
        V = V - np.outer(V_j, V[row_idx]/V_j[row_idx])
        V[:,col_idx] = V[:,i]
        V = V[:,:i]

        # reorthogonalize
        if i > 0:
            V = sym(V)

    rst = np.sort(rst)

    return rst

def sym(X):
    return X.dot(inv(np.real(sqrtm(X.T.dot(X)))))

def sample_k(D, E, k, flag_gpu=False):
    i = D.shape[0]
    remaining = k
    rst = list()

    while remaining > 0:
        if i == remaining:
            marg = 1.
        else:
            marg = D[i-1] * E[remaining-1, i-1] / E[remaining, i]

        if np.random.rand() < marg:
            rst.append(i-1)
            remaining -= 1
        i -= 1

    return np.array(rst)

def get_eig(L, flag_gpu=False):
    if flag_gpu:
        pass
    else:
        return scipy.linalg.eigh(L)

    
def get_sympoly(D, k, flag_gpu=False):
    N = D.shape[0]
    if flag_gpu:
        pass
    else:
        return np.zeros((k+1, N+1))
我收到的错误消息如下:

ValueError                                Traceback (most recent call last)
<ipython-input-124-de2b1c5b58fb> in <module>
      1 estimator = KerasClassifier(model)
----> 2 DPP_perf_hist_5 = active_learning_procedure(DPP_sampler, X_test, y_test,
      3                                               X_pool, y_pool,
      4                                               X_initial, y_initial, estimator, n_instances=5)

<ipython-input-119-0618cfd433fb> in active_learning_procedure(query_strategy, X_test, y_test, X_pool, y_pool, X_initial, y_initial, estimator, epochs, batch_size, n_queries, n_instances, verbose)
      6     perf_hist = [learner.score(X_test, y_test, verbose=verbose)]
      7     for index in range(n_queries):
----> 8         query_idx, query_instance = learner.query(X_pool, n_instances)
      9         learner.teach(X_pool[query_idx], y_pool[query_idx], epochs=epochs, batch_size=batch_size, verbose=verbose)
     10         X_pool = np.delete(X_pool, query_idx, axis=0)

~\anaconda3\lib\site-packages\modAL\models\base.py in query(self, X_pool, *query_args, **query_kwargs)
    259             labelled upon query synthesis.
    260         """
--> 261         query_result = self.query_strategy(self, X_pool, *query_args, **query_kwargs)
    262 
    263         if isinstance(query_result, tuple):

<ipython-input-117-67ae49971228> in DPP_sampler(learner, X, n_instances, T, nTrn, k)
     81 def DPP_sampler(learner, X, n_instances = 1, T = 100, nTrn = 4000, k=1):
     82     random_subset = np.random.choice(X.shape[0], 2000, replace=False)
---> 83     DPP_output = K.function([learner.estimator.model.layers[0].input, K.learning_phase()],
     84                            [learner.estimator.model.layers[-1].output[0]])
     85     DPP_output2 = K.function([learner.estimator.model.layers[0].input, K.learning_phase()],

~\anaconda3\lib\site-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

~\anaconda3\lib\site-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)

~\anaconda3\lib\site-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

~\anaconda3\lib\site-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

~\anaconda3\lib\site-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

~\anaconda3\lib\site-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
 ~\anaconda3\lib\site-packages\tensorflow\python\keras\engine\functional.py in _validate_graph_inputs_and_outputs(self)
    634       if not hasattr(x, '_keras_history'):
    635         cls_name = self.__class__.__name__
 raise ValueError('Input tensors to a ' + cls_name + ' ' + 'must come from `tf.keras.Input`. ' 'Received: ' + str(x) +

ValueError: Input tensors to a Functional must come from `tf.keras.Input`. Received: 0 (missing previous layer metadata).
ValueError回溯(最近一次调用)
在里面
1估计器=KerasClassifier(模型)
---->2 DPP_perf_hist_5=主动学习程序(DPP_采样器、X_测试、y_测试、,
3 X_池,y_池,
4 X_初始值,y_初始值,估计量,n_实例=5)
在主动学习过程中(查询策略、X\u测试、y\u测试、X\u池、y\u池、X\u初始、y\u初始、估计器、年代、批量大小、n\u查询、n\u实例、详细)
6 perf_hist=[学习者分数(X_测试,y_测试,verbose=verbose)]
7对于范围内的索引(n_查询):
---->8 query\u idx,query\u instance=learner.query(X\u池,n\u实例)
9.教学(X_pool[query_idx],y_pool[query_idx],epochs=epochs,batch_size=batch_size,verbose=verbose)
10 X_pool=np.delete(X_pool,query_idx,axis=0)
查询中的~\anaconda3\lib\site packages\modAL\models\base.py(self、X\u pool、*query\u args、**query\u kwargs)
259在查询合成时标记。
260         """
-->261 query\u result=self.query\u策略(self、X\u pool、*query\u args、**query\u kwargs)
262
263如果isinstance(查询结果,元组):
在DPP_采样器中(学习者、X、n_实例、T、nTrn、k)
81 def DPP_采样器(学习者,X,n_实例=1,T=100,nTrn=4000,k=1):
82 random_subset=np.random.choice(X.shape[0],2000,replace=False)
--->83 DPP_输出=K.函数([learner.estimator.model.layers[0]。输入,K.学习阶段(),
84[学习者.估计器.模型.层[-1].输出[0]]
85 DPP_输出2=K.函数([learner.estimator.model.layers[0]。输入,K.学习阶段(),
函数中的~\anaconda3\lib\site packages\tensorflow\python\keras\backend.py(输入、输出、更新、名称,**kwargs)
3934来自tensorflow.python.keras导入模型#pylint:disable=g-import-not-at-top
3935从tensorflow.python.keras.utils导入tf_utils#pylint:disable=g-import-not-at-top
->3936模型=模型。模型(输入=输入,输出=输出)
3937
3938 wrap_输出=isinstance(输出,列表)和len(输出)=1
~\anaconda3\lib\site packages\tensorflow\python\keras\engine\training.py在新的(cls,*args,**kwargs)
240#功能模型
241来自tensorflow.python.keras.engine import functional#pylint:disable=g-import-not-at-top
-->242返回functional.functional(*args,**kwargs)
243其他:
244返回超级(型号,cls)。\uuuuu新的\uuuuuu(cls,*args,**kwargs)
~\anaconda3\lib\site packages\tensorflow\python\training\tracking\base.py in\u method\u包装(self,*args,**kwargs)
455 self._self_setattr_tracking=False#pylint:disable=protected access
456试试:
-->457结果=方法(自身、*args、**kwargs)
458最后:
459 self._self_setattr_tracking=上一个值#pylint:disable=受保护访问
~\anaconda3\lib\site packages\tensorflow\python\keras\engine\functional.py in\uuuuuuu init\uuuuu(self、输入、输出、名称、可培训)
113#'初始化期间的参数。获取意外参数:')
114超级(功能,自我)。\uuuuu初始(名称=名称,可培训=可培训)
-->115自初始化图网络(输入、输出)
116
117@trackable.no\自动\依赖\跟踪
~\anaconda3\lib\site packages\tensorflow\python\training\tracking\base.py in\u method\u包装(self,*args,**kwargs)
455 self._self_setattr_tracking=False#pylint:disable=protected access
456试试:
-->457结果=方法(自身、*args、**kwargs)
458最后:
459 self._self_setattr_tracking=上一个值#pylint:disable=受保护访问
_init_graph_网络中的~\anaconda3\lib\site packages\tensorflow\python\keras\engine\functional.py(自身、输入、输出)
142基础层实用程序。创建历史记录(自嵌套输出)
143
-->144自我验证图输入和输出()
145
146#一个网络本身并不会产生权重,因此它已经存在
~\anaconda3\lib\site packages\tensorflow\python\keras\engine\functional.py在\u validate\u graph\u input\u和\u output(self)中
634如果不是hasattr(x,“\u keras\u history”):
635 cls_name=self.\u类\u.\u名称__
raise VALUERROR(“+cls_名称+”+”的输入张量必须来自'tf.keras.Input`.”接收:'+str(x)+
ValueError:函数的输入张量必须来自`tf.keras.Input`。收到:0(缺少上一层元数据)。
ValueError                                Traceback (most recent call last)
<ipython-input-124-de2b1c5b58fb> in <module>
      1 estimator = KerasClassifier(model)
----> 2 DPP_perf_hist_5 = active_learning_procedure(DPP_sampler, X_test, y_test,
      3                                               X_pool, y_pool,
      4                                               X_initial, y_initial, estimator, n_instances=5)

<ipython-input-119-0618cfd433fb> in active_learning_procedure(query_strategy, X_test, y_test, X_pool, y_pool, X_initial, y_initial, estimator, epochs, batch_size, n_queries, n_instances, verbose)
      6     perf_hist = [learner.score(X_test, y_test, verbose=verbose)]
      7     for index in range(n_queries):
----> 8         query_idx, query_instance = learner.query(X_pool, n_instances)
      9         learner.teach(X_pool[query_idx], y_pool[query_idx], epochs=epochs, batch_size=batch_size, verbose=verbose)
     10         X_pool = np.delete(X_pool, query_idx, axis=0)

~\anaconda3\lib\site-packages\modAL\models\base.py in query(self, X_pool, *query_args, **query_kwargs)
    259             labelled upon query synthesis.
    260         """
--> 261         query_result = self.query_strategy(self, X_pool, *query_args, **query_kwargs)
    262 
    263         if isinstance(query_result, tuple):

<ipython-input-117-67ae49971228> in DPP_sampler(learner, X, n_instances, T, nTrn, k)
     81 def DPP_sampler(learner, X, n_instances = 1, T = 100, nTrn = 4000, k=1):
     82     random_subset = np.random.choice(X.shape[0], 2000, replace=False)
---> 83     DPP_output = K.function([learner.estimator.model.layers[0].input, K.learning_phase()],
     84                            [learner.estimator.model.layers[-1].output[0]])
     85     DPP_output2 = K.function([learner.estimator.model.layers[0].input, K.learning_phase()],

~\anaconda3\lib\site-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

~\anaconda3\lib\site-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)

~\anaconda3\lib\site-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

~\anaconda3\lib\site-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

~\anaconda3\lib\site-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

~\anaconda3\lib\site-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
 ~\anaconda3\lib\site-packages\tensorflow\python\keras\engine\functional.py in _validate_graph_inputs_and_outputs(self)
    634       if not hasattr(x, '_keras_history'):
    635         cls_name = self.__class__.__name__
 raise ValueError('Input tensors to a ' + cls_name + ' ' + 'must come from `tf.keras.Input`. ' 'Received: ' + str(x) +

ValueError: Input tensors to a Functional must come from `tf.keras.Input`. Received: 0 (missing previous layer metadata).