python - 如何从 Keras.layers 实现 Merge
问题描述
我一直在尝试合并以下顺序模型,但未能。谁能指出我的错误,谢谢。
代码在使用“merge”时编译,但出现以下错误“TypeError:'module' object is not callable”但是在使用“Merge”时它甚至无法编译
我正在使用 keras 版本 2.2.0 和 python 3.6
from keras.layers import merge
def linear_model_combined(optimizer='Adadelta'):
modela = Sequential()
modela.add(Flatten(input_shape=(100, 34)))
modela.add(Dense(1024))
modela.add(Activation('relu'))
modela.add(Dense(512))
modelb = Sequential()
modelb.add(Flatten(input_shape=(100, 34)))
modelb.add(Dense(1024))
modelb.add(Activation('relu'))
modelb.add(Dense(512))
model_combined = Sequential()
model_combined.add(Merge([modela, modelb], mode='concat'))
model_combined.add(Activation('relu'))
model_combined.add(Dense(256))
model_combined.add(Activation('relu'))
model_combined.add(Dense(4))
model_combined.add(Activation('softmax'))
model_combined.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])
return model_combined
解决方案
合并不能与顺序模型一起使用。在顺序模型中,层只能有一个输入和一个输出。您必须使用功能性 API,类似这样。我假设您对 modela 和 modelb 使用相同的输入层,但如果不是这种情况,您可以创建另一个 Input() 并将它们都作为模型的输入。
def linear_model_combined(optimizer='Adadelta'):
# declare input
inlayer =Input(shape=(100, 34))
flatten = Flatten()(inlayer)
modela = Dense(1024)(flatten)
modela = Activation('relu')(modela)
modela = Dense(512)(modela)
modelb = Dense(1024)(flatten)
modelb = Activation('relu')(modelb)
modelb = Dense(512)(modelb)
model_concat = concatenate([modela, modelb])
model_concat = Activation('relu')(model_concat)
model_concat = Dense(256)(model_concat)
model_concat = Activation('relu')(model_concat)
model_concat = Dense(4)(model_concat)
model_concat = Activation('softmax')(model_concat)
model_combined = Model(inputs=inlayer,outputs=model_concat)
model_combined.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])
return model_combined
推荐阅读
- networking - 如果我正在体验完美的互联网连接,为什么“ping google.com”会返回 100% 的数据包丢失?
- flutter - 无法在 YoutubeVideoPlayer Flutter 上使用全屏(发生在 android 本机设备上)
- javascript - 如何使用 CSS 或 JavaScript 调整打印机的颜色配置文件/选项
- python - 文件夹名称中的特殊字符
- java - 错误:javax.xml.bind.JAXBContext(命令行)
- asp.net - asp.net GridView 如何将超链接值传递给不同的页面文本框?
- mysql - 如何让 MySqlCommand 与 .NET Core 很好地配合使用?
- c - 是否允许一次 setjmp() 调用多次执行 longjmp() ?
- python - 计算列表字典中最流行的项目python
- azure-devops - 如何限制用户权限仅在 AzureDevOps 的一个存储库中做出贡献