我试图为KerasClassifier包装的Keras模型保留某些历元频率的权重,这将进入sklearn的cross_验证。更具体地说,我想使用模型检查点回调保存所有克隆估计器的权重,这些估计器针对每个CV分割进行训练
我想用它来监控特定时期的混淆矩阵,用于所有分割训练
我尝试了以下代码:
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
n_features = 5
centers = 2
n_samples = 1000
X, y = make_blobs(n_samples=n_samples, centers=centers, n_features=n_features, random_state=3)
def wrap_binary_kerasNN(nodes=16, input_dim=3):
def create_model():
# create model
from keras import models
from keras import layers
model = models.Sequential()
model.add(layers.Dense(nodes,input_dim=input_dim,activation='relu'))
model.add(layers.Dense(nodes, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))
# Compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
print("create_model: building a simple NN")
return model
model = KerasClassifier(build_fn=create_model, verbose=0, )
return model
# Create the model
model = wrap_binary_kerasNN()
# set-up Model Checkpoint callback
from datetime import datetime
weights_dir = os.getcwd()+"/weights"
from keras.callbacks import ModelCheckpoint
model_checkpoint = ModelCheckpoint(weights_dir + "/"+str(datetime.now().timestamp())+"_weights.{epoch:02d}.hdf5",
monitor='acc', verbose=0,
save_best_only=False, save_weights_only=False, period=1,
mode='auto')
# Create Train-Test samples with Stratified K-Fold
from sklearn.model_selection import StratifiedKFold
skf = StratifiedKFold(n_splits=5,shuffle=True)
skf.get_n_splits(X,y)
print(skf)
from sklearn.model_selection import cross_validate
cv_results = cross_validate(model, X, y, cv=skf, return_estimator=True, scoring=None,
fit_params={'callbacks':[model_checkpoint]})
但这只为似乎只有一个模型节省了权重。 有什么解决办法吗?实际上,这可能只是因为保存了权重文件名,但我似乎无法找到任何解决方法
谢谢
目前没有回答
相关问题 更多 >
编程相关推荐