【问题标题】:keras 2.02 to keras 2.12: code no longer workingkeras 2.02 到 keras 2.12:代码不再工作
【发布时间】: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 一起使用。

标签: keras theano


【解决方案1】:

您将相同的Embedding 层实例添加到每个子模型,这就是它有多个输入的原因(它具有每个子模型的输入层作为其输入),这反过来也是为什么@987654322 @ 是模棱两可的。改为这样做:

for kw in kernel_sizes:    # kernel sizes
    embedding_layer = Embedding(input_dim=100, output_dim=300,
                                input_length=100)
    submodel = Sequential()
    submodel.add(embedding_layer)
    submodel.add(Dropout(0.2))

(即在循环内创建Embedding 层实例)

【讨论】:

    猜你喜欢
    • 2017-10-08
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    相关资源
    最近更新 更多