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).