微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么历史记录以递增的整数auc_2,auc_4,...存储auc和val_auc?

如何解决为什么历史记录以递增的整数auc_2,auc_4,...存储auc和val_auc?

我是keras的初学者,今天遇到了我不知道该如何处理的这类问题。 aucval_auc的值与前historyaucauc_2,{{ 1}} ...等等。

这使我无法通过Kfold交叉验证来管理和研究这些值,因为我不能访问auc_4的值,因为并不总是有这样的密钥auc_6。这是代码

history.history['auc']

'auc'中,我呼叫from tensorflow.keras.models import Sequential # pylint: disable= import-error from tensorflow.keras.layers import Dense # pylint: disable= import-error from tensorflow.keras import Input # pylint: disable= import-error from sklearn.model_selection import StratifiedKFold from keras.utils.vis_utils import plot_model from keras.metrics import AUC,Accuracy # pylint: disable= import-error BATCH_SIZE = 32 EPOCHS = 10 K = 5 N_SAMPLE = 1168 METRICS = ['AUC','accuracy'] SAVE_PATH = '../data/exp/final/submodels/' def create_mlp(model_name,keyword,n_sample= N_SAMPLE,batch_size= BATCH_SIZE,epochs= EPOCHS): df = readCSV(n_sample) skf = StratifiedKFold(n_splits = K,random_state = 7,shuffle = True) for train_index,valid_index in skf.split(np.zeros(n_sample),df[['target']]): x_train,y_train,x_valid,y_valid = get_train_valid_dataset(keyword,df,train_index,valid_index) model = get_model(keyword) history = model.fit( x = x_train,y = y_train,validation_data = (x_valid,y_valid),epochs = epochs ) def get_train_valid_dataset(keyword,valid_index): aux = df[[c for c in columns[keyword]]] return aux.iloc[train_index].values,df['target'].iloc[train_index].values,aux.iloc[valid_index].values,df['target'].iloc[valid_index].values def create_callbacks(model_name,save_path,fold_var): checkpoint = ModelCheckpoint( save_path + model_name + '_' +str(fold_var),monitor=CALLBACK_MONITOR,verbose=1,save_best_only= True,save_weights_only= True,mode='max' ) return [checkpoint] ,日志为(仅相关行):

main.py

任何帮助将不胜感激。我正在使用:

create_mlp('model0','euler',n_sample=100)

解决方法

在这一行代码中:

 for train_index,valid_index in skf.split(np.zeros(n_sample),df[['target']]):

实际上发生的是,您正在运行多个训练实例,原则上sklearn默认为5。

尽管您在:中得到了不同的培训和验证集。

 x_train,y_train,x_valid,y_valid = get_train_valid_dataset(keyword,df,train_index,valid_index)

运行model.fit()时,

   history = model.fit(
            x = x_train,y = y_train,validation_data = (x_valid,y_valid),epochs = epochs,callbacks=create_callbacks(keyword + '_' + model_name,SAVE_PATH,folder)
        )

您会看到create_callbacks的参数是静态的,并且不会从一个训练实例更改为另一个。 Keywordmodel_nameSAVE_PATHfolder是在训练的5个实例中保持不变的参数。

因此,在TensorBoard中,所有结果都在同一路径下写入。

您不想这样做,您希望每次迭代都将其结果写入不同的路径。

您必须更改logdir参数,为其指定唯一的标识符。在这种情况下,每次训练迭代都会将其结果写在不同的位置,因此混乱将消失。

,

我通过更改为tensorflow==2.1.0解决了该问题。希望它可以帮助其他人。

,

使用tf.keras.backend.clear_session()

https://www.tensorflow.org/api_docs/python/tf/keras/backend/clear_session

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。