Keras ValueError:调用层conv1d时使用的输入不是';t是符号张量。层的所有输入都应该是张量

Keras ValueError:调用层conv1d时使用的输入不是';t是符号张量。层的所有输入都应该是张量,keras,conv-neural-network,sequential,word-embedding,tf.keras,Keras,Conv Neural Network,Sequential,Word Embedding,Tf.keras,我建立了这个模型,它工作得很好 ###Building the Model. input_layer= Embedding(num_words, 300, input_length=35, weights=[embedding_matrix],trainable=True) conv_blocks = [] filter_sizes = (2,3,4) for fx in filter_sizes: conv_layer= Conv1D(100, kernel_size=fx, act

我建立了这个模型,它工作得很好

###Building the Model. 
input_layer= Embedding(num_words, 300, input_length=35, weights=[embedding_matrix],trainable=True)
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)
    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)
conc_layer=Concatenate(axis=-1)([conv_blocks])
graph = Model(inputs=input_layer, outputs=conc_layer)

model = Sequential()
model.add(graph)
model.add(Dropout(0.2))
model.add(Dense(3, activation='sigmoid'))
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.summary()
我最近重新运行了它,我得到了一个错误

Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/am/embassy/vol/x6/jetbrains/apps/PyCharm-P/ch-0/191.6183.50/helpers/pydev/_pydev_bundle/pydev_umd.py", line 197, in runfile
    pydev_imports.execfile(filename, global_vars, local_vars)  # execute the script
  File "/am/embassy/vol/x6/jetbrains/apps/PyCharm-P/ch-0/191.6183.50/helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "/home/kosimadukwe/PycharmProjects/untitled/WordEmb.py", line 128, in <module>
conv_layer= Conv1D(100, kernel_size=fx, activation='relu', data_format='channels_first')(input_layer)   #filters=100, kernel_size=3
  File "/home/kosimadukwe/PycharmProjects/untitled/venv/lib/python3.7/site-packages/keras/engine/base_layer.py", line 414, in __call__
self.assert_input_compatibility(inputs)
  File "/home/kosimadukwe/PycharmProjects/untitled/venv/lib/python3.7/site-packages/keras/engine/base_layer.py", line 285, in assert_input_compatibility
str(inputs) + '. All inputs to the layer '
ValueError: Layer conv1d_1 was called with an input that isn't a symbolic tensor. Received type: <class 'keras.layers.embeddings.Embedding'>. Full input: [<keras.layers.embeddings.Embedding object at 0x7fae61513c18>]. All inputs to the layer should be tensors.

抛出错误是因为
input\u layer
layer
而不是
Tensor
。 您正在将
嵌入
“层”作为输入传递到
Conv1D
,在这种情况下,您没有向嵌入层提供任何输入

更改此项:

input_layer= Embedding(num_words, 300, input_length=35, weights=[embedding_matrix],trainable=True)
并将输入张量添加到此层:

input_layer= Embedding(num_words, 300, input_length=35, weights=[embedding_matrix],trainable=True)(input_tensor)

此外,我认为您正在尝试将三个独立过滤器的输出连接起来,如果是这样的话,那么:

conc_layer=Concatenate(axis=-1)([conv_blocks])
graph = Model(inputs=input_layer, outputs=conc_layer)

这部分将从回路外部出来。

哦。正确的。但是
输入张量的内容是什么。
是的,多亏了循环中的
连接
是一个输入错误。输入张量将是模型的实际输入,它将被传递到嵌入层,相同的输入将作为模型()中的输入给出我不清楚这个
输入\u张量将是模型的实际输入。我尝试了
input\u tensor=input(shape=1300)
,但不起作用。我得到了另一个错误,我无法解释'ValueError:Layer weight shape(16513300)与提供的weight shape(16514300)不兼容'。模型的实际输入在
model.fit
阶段引入。你能给我指一些材料吗。谢谢,对不起,我的错!输入张量将是与模型实际输入形状相同的张量。
model.fit时传递的输入的形状是什么?im传递的输入的形状是
(18587,35)
。我也尝试过,但在我之前的评论中,它总是给出同样的错误。所以基本上,我有一个形状
(16514300)
的嵌入矩阵,其中每一行是表示单个单词的300d向量。我的火车套件包含18587个句子,每个句子最多35个单词。
conc_layer=Concatenate(axis=-1)([conv_blocks])
graph = Model(inputs=input_layer, outputs=conc_layer)