【发布时间】:2018-02-09 07:33:53
【问题描述】:
我试图在 keras 中合并 2 个顺序模型。代码如下:
model1 = Sequential(layers=[
# input layers and convolutional layers
Conv1D(128, kernel_size=12, strides=4, padding='valid', activation='relu', input_shape=input_shape),
MaxPooling1D(pool_size=6),
Conv1D(256, kernel_size=12, strides=4, padding='valid', activation='relu'),
MaxPooling1D(pool_size=6),
Dropout(.5),
])
model2 = Sequential(layers=[
# input layers and convolutional layers
Conv1D(128, kernel_size=20, strides=5, padding='valid', activation='relu', input_shape=input_shape),
MaxPooling1D(pool_size=5),
Conv1D(256, kernel_size=20, strides=5, padding='valid', activation='relu'),
MaxPooling1D(pool_size=5),
Dropout(.5),
])
model = merge([model1, model2], mode = 'sum')
Flatten(),
Dense(256, activation='relu'),
Dropout(.5),
Dense(128, activation='relu'),
Dropout(.35),
# output layer
Dense(5, activation='softmax')
return model
这是错误日志:
文件 “/nics/d/home/dsawant/anaconda3/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py”, 第 392 行,在 is_keras_tensor 中 raise ValueError('意外找到了
' + str(type(x)) + '类型的实例。' ValueError:意外找到了 输入<class 'keras.models.Sequential'>。期望一个符号张量 实例。
更多日志:
ValueError: Layer merge_1 被调用的输入不是 符号张量。接收类型:类 'keras.models.Sequential'。 完整输入:[keras.models.Sequential object at 0x2b32d518a780, keras.models.Sequential 对象在 0x2b32d521ee80]。所有输入到 层应该是张量。
如何合并这 2 个使用不同窗口大小的 Sequential 模型并对它们应用“max”、“sum”等函数?
【问题讨论】:
-
你需要合并两个模型的输出层,我不认为你可以在keras中合并编译好的模型。你应该看看keras' functional API
-
知道了。我以为我们可以。值得一试。谢谢你的链接
-
编译不会影响创建/更改模型的任何内容。但是当您更改时,您将不得不再次编译以进行培训。 (在 keras 中编译只是:“为训练设置优化器和损失函数”,仅此而已)。如果你不打算训练,你甚至不需要“编译”一个模型,它可以做所有事情,包括预测,当它没有编译时,除了训练。
标签: python machine-learning neural-network keras conv-neural-network