深度学习模型和评估 设计和配置深度学习模型时,面临选择(比如网络的层数、大小和类型,以及损失函数的选择等),必须做出决策来选择合适的设计与配置。最好的选择是设计小型实验,并用实际数据来评估各个选项。 深度学习具有数据量大和模型复杂的特征,在评估模型时,通常将数据简单地分成训练集和测试集。keras提供了两种评估学习模型地方法:自动评估和手动评估。 自动评估 Keras可将数据集的一部分分成评估集,并在每个epoch中使用该评估数据集对模型进行评估。可以通过fit()函数的验证分割参数(validation_split)设置为数据集大小的百分比来实现。 import tensorflow import keras from keras.models import Sequential from keras.layers import Dense import numpy as np #设定随机数种子 np.random.seed(7) #导入数据 dataset = np.loadtxt('pima-indians-diabetes.csv',delimiter=',') #分割输入变量x和输出变量Y x = dataset[:,:8] Y = dataset[:,8] #创建模型 model = Sequential() model.add(Dense(input_dim=8,units=12,activation='relu')) model.add(Dense(units=8,activation='relu')) model.add(Dense(units=1,activation='sigmoid')) #编译模型 model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy']) #训练模型并自动评估模型 model.fit(x=x,y=Y,epochs=150,batch_size=10,validation_split=0.2) k折交叉验证 机器学习模型评估的黄金标准是k折交叉验证。它提供了模型对未知数据性能的可靠估计。 k折交叉验证的过程是将数据集分成k个子集,选择其中一个子集作为测试集,利用剩余的k-1个子集训练模型,并用预留的子集对模型进行评估。重复该过程,直到所有子集被赋予作为被评估数据集的机会。采用k个模型评估结果的平均值作为模型最终的评估结果。 k折交叉验证通常使用5个或10个子集。 import tensorflow import keras from keras.models import Sequential from keras.layers import Dense import numpy as np from sklearn.model_selection import StratifiedKFold seed = 7 #设定随机数种子 np.random.seed(seed) #导入数据 dataset = np.loadtxt('pima-indians-diabetes.csv',delimiter=',') #分割输入变量x和输出变量Y x = dataset[:,0:8] Y = dataset[:,8] kfold = StratifiedKFold(n_splits=10,random_state=True,shuffle=True) cvscores = [] for train,validation in kfold.split(x,Y): #创建模型 model = Sequential() model.add(Dense(input_dim=8,units=12,activation='relu')) model.add(Dense(units=8,activation='relu')) model.add(Dense(units=1,activation='sigmoid')) #编译模型 model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy']) #训练模型 model.fit(x[train],Y[train],epochs=150,batch_size=10,verbose=0) #通过设置verbose为0来关闭模型的fit()和evaluate()函数的详细输出 #评估模型 scores = model.evaluate(x[validation],Y[validation],verbose=0) #输出评估结果 print('%s:%.2f%%' %(model.metrics_names[1],scores[1]*100)) cvscores.append(scores[1]*100) #输出均值和标准差 print('%.2f%%(+/-%.2f%%)' %(np.mean(cvscores),np.std(cvscores))) #将数据分割成10个子集,并利用折10个子集创建和评估10个模型,且收集这10个模型的评估得分。 【转载】原文译文地址:https://blog.csdn.net/zhangyuee19501107/article/details/81051809
|