A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

深度学习模型和评估

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

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


5 个回复

倒序浏览
奈斯
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马