Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ValueError:应在至少包含2个输入的列表上调用“Concatenate”层_Python_Python 3.x_Keras_Conv Neural Network_Tf.keras - Fatal编程技术网

Python ValueError:应在至少包含2个输入的列表上调用“Concatenate”层

Python ValueError:应在至少包含2个输入的列表上调用“Concatenate”层,python,python-3.x,keras,conv-neural-network,tf.keras,Python,Python 3.x,Keras,Conv Neural Network,Tf.keras,我尝试使用一个sigmoid来连接两个具有不同嵌入矩阵的模型的输出。但我一直在连接行中得到错误。我尝试过类似问题的其他建议,但它总是给出同样的错误。我觉得我错过了什么,但我找不到。请帮忙解释一下。谢谢 ############################ MODEL 1 ###################################### input_tensor=Input(shape=(35,)) input_layer= Embedding(

我尝试使用一个sigmoid来连接两个具有不同嵌入矩阵的模型的输出。但我一直在连接行中得到错误。我尝试过类似问题的其他建议,但它总是给出同样的错误。我觉得我错过了什么,但我找不到。请帮忙解释一下。谢谢

############################            MODEL   1      ######################################
input_tensor=Input(shape=(35,))
input_layer= Embedding(vocab_size, 300, input_length=35, weights=[embedding_matrix],trainable=True)(input_tensor)
conv_blocks = []
filter_sizes = (2,3,4)
for fx in filter_sizes:
    conv_layer= Conv1D(100, kernel_size=fx, activation='relu', data_format='channels_first')(input_layer)   #filters=100, kernel_size=3
    maxpool_layer = MaxPooling1D(pool_size=4)(conv_layer)
    flat_layer= Flatten()(maxpool_layer)
    conv_blocks.append(flat_layer)
conc_layer=concatenate(conv_blocks, axis=1)
graph = Model(inputs=input_tensor, outputs=conc_layer)
model = Sequential()
model.add(graph)
model.add(Dropout(0.2))

############################            MODEL    2     ######################################
input_tensor_1=Input(shape=(35,))
input_layer_1= Embedding(vocab_size, 300, input_length=35, weights=[embedding_matrix_1],trainable=True)(input_tensor_1)
conv_blocks_1 = []
filter_sizes_1 = (2,3,4)
for fx in filter_sizes_1:
    conv_layer_1= Conv1D(100, kernel_size=fx, activation='relu', data_format='channels_first')(input_layer_1)   #filters=100, kernel_size=3
    maxpool_layer_1 = MaxPooling1D(pool_size=4)(conv_layer_1)
    flat_layer_1= Flatten()(maxpool_layer_1)
    conv_blocks_1.append(flat_layer_1)
conc_layer_1=concatenate(conv_blocks_1, axis=1)
graph_1 = Model(inputs=input_tensor_1, outputs=conc_layer_1)
model_1 = Sequential()
model_1.add(graph_1)
model_1.add(Dropout(0.2))


fused = concatenate([graph, graph_1], axis=-1)
prediction = Dense(3, activation='sigmoid')(fused)
model = Model(inputs=[input_tensor,input_tensor_1], outputs=[prediction])
model.compile(loss='sparse_categorical_crossentropy',optimizer='Adagrad', metrics=['accuracy'])
model.summary()
这是错误跟踪

Traceback (most recent call last):
  File "DL_Ensemble.py", line 145, in <module>
    fused = concatenate([graph, graph_1], axis= 1 )
  File "/usr/pkg/lib/python3.8/site- 
   packages/tensorflow_core/python/keras/layers/merge.py", line 705, in concatenate
    return Concatenate(axis=axis, **kwargs)(inputs)
  File "/usr/pkg/lib/python3.8/site-packages/tensorflow_core/python/keras/engine/base_layer.py", line 887, in __call__
    self._maybe_build(inputs)
  File "/usr/pkg/lib/python3.8/site-packages/tensorflow_core/python/keras/engine/base_layer.py", line 2141, in _maybe_build
    self.build(input_shapes)
   File "/usr/pkg/lib/python3.8/site- 
   packages/tensorflow_core/python/keras/utils/tf_utils.py", line 306, in wrapper
output_shape = fn(instance, input_shape)
  File "/usr/pkg/lib/python3.8/site- 
   packages/tensorflow_core/python/keras/layers/merge.py", line 378, in build
    raise ValueError('A `Concatenate` layer should be called '
ValueError: A `Concatenate` layer should be called on a list of at least 2 inputs
我还想补充一点,当代码在GPU(而不是CPU)上运行时,错误会出现在与之前相同的行上,但消息更改为:

File "DL_Ensemble.py", line 166, in <module>
model.fit([train_sequences,train_sequences], train_y, epochs=10, verbose=False, batch_size=32, class_weight={0: 6.0, 1: 1.0, 2: 2.0})
  File "/home/kosimadukwe/.local/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py", line 880, in fit
validation_steps=validation_steps)
  File "/home/kosimadukwe/.local/lib/python3.7/site-packages/tensorflow/python/keras/engine/training_arrays.py", line 329, in model_iteration
batch_outs = f(ins_batch)
  File "/home/kosimadukwe/.local/lib/python3.7/site-packages/tensorflow/python/keras/backend.py", line 3073, in __call__
self._make_callable(feed_arrays, feed_symbols, symbol_vals, session)
  File "/home/kosimadukwe/.local/lib/python3.7/site-packages/tensorflow/python/keras/backend.py", line 3019, in _make_callable
callable_fn = session._make_callable_from_options(callable_opts)
  File "/home/kosimadukwe/.local/lib/python3.7/site-packages/tensorflow/python/client/session.py", line 1471, in _make_callable_from_options
return BaseSession._Callable(self, callable_options)
  File "/home/kosimadukwe/.local/lib/python3.7/site-packages/tensorflow/python/client/session.py", line 1425, in __init__
session._session, options_ptr, status)
  File "/home/kosimadukwe/.local/lib/python3.7/site-packages/tensorflow/python/framework/errors_impl.py", line 528, in __exit__
c_api.TF_GetCode(self.status.status))
tensorflow.python.framework.errors_impl.InvalidArgumentError: Conv2DCustomBackpropInputOp only supports NHWC.
     [[{{node training/Adagrad/gradients/conv1d_5/conv1d/Conv2D_grad/Conv2DBackpropInput}}]]
Exception ignored in: <function BaseSession._Callable.__del__ at 0x7fe4dd06a730>
Traceback (most recent call last):
  File "/home/kosimadukwe/.local/lib/python3.7/site-packages/tensorflow/python/client/session.py", line 1455, in __del__
self._session._session, self._handle, status)
  File "/home/kosimadukwe/.local/lib/python3.7/site-packages/tensorflow/python/framework/errors_impl.py", line 528, in __exit__
c_api.TF_GetCode(self.status.status))
tensorflow.python.framework.errors_impl.InvalidArgumentError: No such callable handle: 94697914208640
文件“DL_employ.py”,第166行,在
模型拟合([train_sequences,train_sequences],train_y,epochs=10,verbose=False,batch_size=32,class_weight={0:6.0,1:1.0,2:2.0})
文件“/home/kosimadukwe/.local/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py”,第880行,以合适的格式
验证步骤=验证步骤)
文件“/home/kosimadukwe/.local/lib/python3.7/site packages/tensorflow/python/keras/engine/training\u arrays.py”,第329行,在模型迭代中
批量输出=f(批量输入)
文件“/home/kosimadukwe/.local/lib/python3.7/site packages/tensorflow/python/keras/backend.py”,第3073行,在__
self.\u使\u可调用(提要数组、提要符号、符号VAL、会话)
文件“/home/kosimadukwe/.local/lib/python3.7/site-packages/tensorflow/python/keras/backend.py”,第3019行,在“make”中可调用
可调用\u fn=会话。\u从\u选项(可调用选项)生成\u可调用\u
文件“/home/kosimadukwe/.local/lib/python3.7/site packages/tensorflow/python/client/session.py”,第1471行,位于“使可调用”from“选项”中
返回BaseSession.\u可调用(self,Callable\u选项)
文件“/home/kosimadukwe/.local/lib/python3.7/site packages/tensorflow/python/client/session.py”,第1425行,在__
会话。_会话,选项_ptr,状态)
文件“/home/kosimadukwe/.local/lib/python3.7/site packages/tensorflow/python/framework/errors\u impl.py”,第528行,在退出时__
c_api.TF_GetCode(self.status.status))
tensorflow.python.framework.errors\u impl.invalidargumeinterror:Conv2DCustomBackpropInputOp仅支持NHWC。
[{{node training/Adagrad/gradients/conv1d_5/conv1d/Conv2D_grad/Conv2DBackpropInput}]
在中忽略异常:
回溯(最近一次呼叫最后一次):
文件“/home/kosimadukwe/.local/lib/python3.7/site packages/tensorflow/python/client/session.py”,第1455行,在__
self.\u session.\u session,self.\u handle,status)
文件“/home/kosimadukwe/.local/lib/python3.7/site packages/tensorflow/python/framework/errors\u impl.py”,第528行,在退出时__
c_api.TF_GetCode(self.status.status))
tensorflow.python.framework.errors\u impl.InvalidArgumentError:没有此类可调用句柄:94697914208640

因此,从堆栈跟踪中,代码在以下位置抛出错误:

fused = concatenate([graph, graph_1], axis= 1 )
print(type(graph))
# output: <class 'tensorflow.python.keras.engine.training.Model'>
这里,
graph.outputs
根据模型给出了输出列表。因为每个模型都给我们一个输出,所以我们将从每个输出中获取第0个索引


更改此部分,您将获得预期的模型摘要。

您正在多个位置使用
连接
。请发布完整的错误跟踪,以便更清楚是哪个部分导致了错误。错误是什么?@VivekMehta我已经发布了,谢谢。模型摘要生成良好。请你给我指出一些可以解释这个概念的东西好吗?我永远也猜不到。另外,当我尝试拟合模型时,我得到了以下错误
ValueError:检查模型输入时出错:传递给模型的Numpy数组列表的大小不是模型预期的大小。期望看到2个数组,但得到了以下1个数组的列表:
。这和我的火车有关。我已经确认这是一个numpy数组,但仍然是相同的错误。其他类似的问题没有答案。你有什么想法吗?另外,当我只使用一个模型时,模型是正确的。我在答案中附加了
串联
模型
的文档链接。您可以检查方法所需的输入。对于错误:您的模型需要两个此处定义的输入
模型(输入=[input\u tensor,input\u tensor\u 1],输出=[prediction])
。因此,您必须按照
input\u tensor
中定义的形状传递两个输入的列表,并且
input\u tensor\u 1
错误跟踪显示它
仅支持NHWC
,这是一种
数据格式
,因此这是一个起点。
fused = concatenate([graph, graph_1], axis= 1 )
print(type(graph))
# output: <class 'tensorflow.python.keras.engine.training.Model'>
fused = concatenate([graph.outputs[0], graph_1.outputs[0]], axis=-1)