hh *_* tt 3 concatenation deep-learning conv-neural-network keras
我有 8 个 CNN 模型,model1, model2, model3, model4, model5, model6, model7, model8每个模型都有 conv2d、激活、maxpooling、dropout 层。我想连接它们的输出,压平它,最后编译并适合它以便能够分类目的,如下图所示:
我对串联、合并和拟合感到困惑。例如,我可以单独展平每个模型model1.add(Flatten),然后将它们连接起来,还是必须连接并展平所有模型?我的Python代码如下:
merge = Concatenate([model1, model2, model3, model4, model5, model6, model7, model8])
concat_model = Sequential()
concat_model.add(merge)
concat_model.add(Flatten())
concat_model.add(Dense(128))
concat_model.add(Activation("relu"))
concat_model.add(BatchNormalization())
concat_model.add(Dropout(0.5))
concat_model.add(Dense(classes))
concat_model.add(Activation("softmax"))
concat_model.compile(loss="categorical_crossentropy", optimizer= opt, metrics=["accuracy"])
concat_model.fit_generator(aug.flow(trainX, trainY, batch_size=BS),validation_data=(testX, testY), steps_per_epoch=len(trainX) // BS, epochs=EPOCHS, verbose=1)
Run Code Online (Sandbox Code Playgroud)
当我运行该程序时,出现以下错误:
RuntimeError: You must compile your model before using it.
Run Code Online (Sandbox Code Playgroud)
问题是什么?我如何连接、编译、训练?任何人都可以帮助我,任何信息都会有帮助。
从文档中可以看出,“Keras 函数式 API 是定义复杂模型的方法,例如多输出模型、有向无环图或具有共享层的模型。” 所以,使用函数式 API 更好。
https://keras.io/getting-started/function-api-guide/#shared-vision-model
https://keras.io/getting-started/function-api-guide/#visual-question-answering-model
您可以在单个模型中展平,然后连接,如上面的示例所示。就你而言,你最终会得到这样的东西。
Final_model = 模型([input_1, input_2,...input_8],face_probability)
有两个分支的最小示例:
from keras.layers import Conv2D, MaxPooling2D, Input, Dense, Flatten, concatenate
from keras.models import Model
import numpy as np
digit_a = Input(shape=(27, 27, 1))
x = Conv2D(64, (3, 3))(digit_a)
x = Conv2D(64, (3, 3))(x)
x = MaxPooling2D((2, 2))(x)
out_a = Flatten()(x)
digit_b = Input(shape=(27, 27, 1))
x = Conv2D(64, (3, 3))(digit_b)
x = Conv2D(64, (3, 3))(x)
x = MaxPooling2D((2, 2))(x)
out_b = Flatten()(x)
concatenated = concatenate([out_a, out_b])
out = Dense(1, activation='sigmoid')(concatenated)
model = Model([digit_a, digit_b], out)
print(model.summary())
model.compile('sgd', 'binary_crossentropy', ['accuracy'])
X = [np.zeros((1,27,27,1))] * 2
y = np.ones((1,1))
model.fit(X, y)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9835 次 |
| 最近记录: |