评估深度学习模型

深度学习模型和评估

设计和配置深度学习模型时,面临选择(比如网络的层数、大小和类型,以及损失函数的选择等),必须做出决策来选择合适的设计与配置。最好的选择是设计小型实验,并用实际数据来评估各个选项。

深度学习具有数据量大和模型复杂的特征,在评估模型时,通常将数据简单地分成训练集和测试集。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)

    #通过设置verbose0来关闭模型的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个模型的评估得分。

 

 

猜你喜欢

转载自blog.csdn.net/zhangyuee19501107/article/details/81051809
今日推荐