我正在尝试制作 2 个 Tensorflow Keras 模型的集合。
模型 1:
model = Sequential(
[
Input(shape=(28,28,1)),
Conv2D(32, kernel_size=(3, 3), activation="relu"),
MaxPooling2D(pool_size=(2, 2)),
Conv2D(64, kernel_size=(3, 3), activation="relu"),
MaxPooling2D(pool_size=(2, 2)),
Flatten(),
Dropout(0.5),
Dense(10, activation="softmax"),
]
)
#model.summary()
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['acc', 'mse'])
history = model.fit(X_train_norm, y_train_ohe, batch_size=256, epochs=20, verbose=2, validation_data=(X_test_norm,y_test_ohe))
模型 2:
model2 = Sequential(
[
Input(shape=(28,28,1)),
Conv2D(32, kernel_size=(3, 3), activation="relu"),
MaxPooling2D(pool_size=(2, 2)),
Conv2D(64, kernel_size=(3, 3), activation="relu"),
MaxPooling2D(pool_size=(2, 2)),
Conv2D(32, kernel_size=(3, 3), activation="relu"),
MaxPooling2D(pool_size=(2, 2)),
Flatten(),
Dropout(0.5),
Dense(10, activation="softmax"),
]
)
model2.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['acc'])
hist = model2.fit(X_train_norm, y_train_ohe, batch_size=512, epochs=10, verbose=2, validation_data=(X_test_norm, y_test_ohe))
现在为了集成这两个模型,我想通过包装器将它们创建为 sklearn 模型,并将它们用于 this 等投票分类器。
我的代码:
from sklearn.ensemble import VotingClassifier
from tensorflow.keras.wrappers.scikit_learn import KerasClassifier
myModel = KerasClassifier(build_fn=model)
myModel2 = KerasClassifier(build_fn=model2)
from sklearn.multiclass import OneVsRestClassifier
ensemModel = OneVsRestClassifier(VotingClassifier(estimators=[('cnn', model), ('lstm',model2)]))
ensemModel.fit(X_train_norm, y_train_ohe)
但我收到此错误:
TypeError: can't pickle _thread.RLock objects