【发布时间】:2018-01-14 07:27:26
【问题描述】:
我正在构建一个具有多种过滤器尺寸的卷积网络。代码如下所示,之前在 keras 2.0.2 和 theano 0.9 中工作。我最近使用 theano 1.0.1 迁移到 keras 2.1.2,它不再工作。我不明白最后一行抛出的错误
flts=100
kernel_sizes=[2,3,4]
submodels = []
embedding_layer = Embedding(input_dim=100, output_dim=300,
input_length=100)
for kw in kernel_sizes: # kernel sizes
submodel = Sequential()
submodel.add(embedding_layer)
submodel.add(Dropout(0.2))
submodel.add(Conv1D(filters=flts,
kernel_size=kw,
padding='same',
activation='relu'))
submodel.add(MaxPooling1D(pool_size=kw))
submodels.append(submodel)
submodel_outputs = [model.output for model in submodels]
x = Concatenate(axis=1)(submodel_outputs)
parallel_layers=Model(inputs=embedding_layer.input, outputs=x) ### error at this line
最后一行使用 keras 2.1.2 生成错误,之前它可以正常工作:
File "...", line 137, in ...
parallel_layers=Model(inputs=embedding_layer.input, outputs=x)
File "/home/ziqizhang/anaconda3/lib/python3.6/site-packages/keras/engine/topology.py", line 926, in input
' has multiple inbound nodes, '
AttributeError: Layer embedding_1 has multiple inbound nodes, hence the notion of "layer input" is ill-defined. Use `get_input_at(nod e_index)` instead.
非常感谢有关如何纠正此问题的一些提示,非常感谢!
【问题讨论】:
-
我不认为像你正在做的那样将功能 API 与顺序 API 结合起来是正确的。您应该为模型中的所有内容使用功能 API。
-
感谢您的评论。问题是我真的想使用围绕 scikit learn 的 KerasClassifier,所以我可以在上面使用 gridsearch。我记得我从功能性 API 开始,但后来不知道去哪里实现它,因此求助于这种方法......
-
您仍然可以将包装器与功能 API 一起使用。