您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何保存最好的hyperopt优化keras模型及其权重?

5b51 2022/1/14 8:21:30 python 字数 4014 阅读 513 来源 www.jb51.cc/python

我使用hyperopt优化了我的keras模型.现在我们如何将最佳优化的keras模型及其权重保存到磁盘.我的代码:from hyperopt import fmin, tpe, hp, STATUS_OK, Trials from sklearn.metrics import roc_auc_score import sys X = [] y = []

概述

我使用hyperopt优化了我的keras模型.现在我们如何将最佳优化的keras模型及其权重保存到磁盘.

我的代码

from hyperopt import fmin,tpe,hp,STATUS_OK,Trials
from sklearn.metrics import roc_auc_score
import sys

X = []
y = []
X_val = []
y_val = []

space = {'choice': hp.choice('num_layers',[ {'layers':'two',},{'layers':'three','units3': hp.uniform('units3',64,1024),'dropout3': hp.uniform('dropout3',.25,.75)}
                    ]),'units1': hp.choice('units1',[64,1024]),'units2': hp.choice('units2','dropout1': hp.uniform('dropout1',.75),'dropout2': hp.uniform('dropout2','batch_size' : hp.uniform('batch_size',20,100),'nb_epochs' :  100,'optimizer': hp.choice('optimizer',['adadelta','adam','rmsprop']),'activation': 'relu'
        }

def f_nn(params):   
    from keras.models import Sequential
    from keras.layers.core import Dense,Dropout,Activation
    from keras.optimizers import Adadelta,Adam,rmsprop

    print ('Params testing: ',params)
    model = Sequential()
    model.add(Dense(output_dim=params['units1'],input_dim = X.shape[1])) 
    model.add(Activation(params['activation']))
    model.add(Dropout(params['dropout1']))

    model.add(Dense(output_dim=params['units2'],init = "glorot_uniform")) 
    model.add(Activation(params['activation']))
    model.add(Dropout(params['dropout2']))

    if params['choice']['layers']== 'three':
        model.add(Dense(output_dim=params['choice']['units3'],init = "glorot_uniform")) 
        model.add(Activation(params['activation']))
        model.add(Dropout(params['choice']['dropout3']))    

    model.add(Dense(1))
    model.add(Activation('sigmoid'))
    model.compile(loss='binary_crossentropy',optimizer=params['optimizer'])

    model.fit(X,y,nb_epoch=params['nb_epochs'],batch_size=params['batch_size'],verbose = 0)

    pred_auc =model.predict_proba(X_val,batch_size = 128,verbose = 0)
    acc = roc_auc_score(y_val,pred_auc)
    print('AUC:',acc)
    sys.stdout.flush() 
    return {'loss': -acc,'status': STATUS_OK}


trials = Trials()
best = fmin(f_nn,space,algo=tpe.suggest,max_evals=100,trials=trials)
print 'best: '
print best

def f_nn(params):
    ...
    # I omit a part of the code   
    pred_auc =model.predict_proba(X_val,pred_auc)

    try:
        with open("metric.txt") as f:
            min_acc = float(f.read().strip())  # read best metric,except FileNotFoundError:
            min_acc = acc  # else just use current value as the best

    if acc < min_acc:
         model.save("model.hd5")  # save best to disc and overwrite metric
         with open("metric.txt","w") as f:
             f.write(str(acc))

    print('AUC:','status': STATUS_OK}

trials = Trials()
best = fmin(f_nn,trials=trials)
print 'best: '
print best

from keras.models import load_model
best_model = load_model("model.hd5")

这种方法有几个优点:您可以将度量和模型保持在一起,甚至可以应用于某些版本或数据版本控制系统 – 这样您就可以在将来恢复实验结果.

编辑
如果存在来自先前运行的某个度量标准,则可能会导致意外行为,但您不会将其删除.因此,您可以采用代码 – 在优化后删除指标或使用时间戳等来区分您的实验数据.

总结

以上是编程之家为你收集整理的如何保存最好的hyperopt优化keras模型及其权重?全部内容,希望文章能够帮你解决如何保存最好的hyperopt优化keras模型及其权重?所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶