IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 深度学习入门系列3:深度学习模型的性能评价方法 -> 正文阅读

[人工智能]深度学习入门系列3:深度学习模型的性能评价方法

仅供学习参考,不做商用!

系列文章目录

深度学习入门系列1:多层感知器概述
深度学习入门系列2:用TensorFlow构建你的第一个神经网络
深度学习入门系列3:深度学习模型的性能评价方法
待更新:
深度学习入门系列4:使用keras模型与scikit-learn进行通用机器学
深度学习入门系列5:项目:花种的多分类
深度学习入门系列6:项目:声纳二分类
深度学习入门系列7:项目:波士顿房屋价格回归
深度学习入门系列8:保存模型以便稍后进行序列化
深度学习入门系列9:训练期间用检查点保存最好模型
深度学习入门系列10:从绘制记录中理解训练期间的模型行为
深度学习入门系列11:用Dropout正则减少过拟合
深度学习入门系列12:使用学习规划来提升性能
深度学习入门系列13:卷积神经网络
深度学习入门系列14项目:手写数字识别
深度学习入门系列15用图像增强改善模型性能
深度学习入门系列16:图像中对象识别项目
深度学习入门系列17:项目:从电影评论预测情感
深度学习入门系列18:递归神经网络


当我们设计和配置深度学习模型时,需要做很多决策。大多数决策通过试错来经验性解决并在真实数据上评价它们。因为这样,需要一个强大的方法来评价你的神经网络和深度学习模型是非常重要的。在这节课中,你将学习几种使用Keras评价模型性能的方法。完成这节课之后你将了解:
  • 如何使用自动验证集评价Keras模型。
  • 如何使用手动验证集评价Keras模型。
  • 如何使用K-折叉验证评价Keras模型。
    让我们开始吧。

1 先验地评价网络配置

当你设计和配置你的深度学习模型,你必须做很多决定。大部分决定你可以通过复制其他人的网络结构来解决和使用启发式方法。归根结底,最好的技术是实际设计小实验并使用真实数据先验地评估你的选择。这包括高水平的选择,如你网络中的层的数量,大小和类型。也包括低水平选择,像损失函数,激活函数,优化程序和迭代数量。
深度学习经常在有大规模数据的问题上使用。这有成千上万个实例。因此,你需要有个鲁棒性高的测试工具,允许你在未知数据上评估你配置的性能,并且能可靠和其他配置进行比较。

2 数据分割

大规模数据和复杂模型需要非常长训练时间。因此,典型将数据简单分割成训练集和测试集或者训练集和验证集。Keras提供了两种方便的评价你的深度学习算法的方法:
1.使用自动验证集。
2.使用手动验证集。

2.1 使用自动验证集

Keras 能力分割训练集部分数据为验证集并在每次迭代时在验证集上评价你模型性能。你可以这么做,在fit() 函数中validation_split参数设置训练集的百分百比。例如,合理值可能是0.2或者0.33对应于训练集中20%或者33%为验证集。下面这个例子描述了在Pima Indians 糖尿病数据集上使用自动验证集的方法。

# create your first MLP in Keras

from keras.models import Sequential
from keras.models import Dense
import numpy

# fix random seed for reproducility
seed = 7
numpy.random.seed(seed)

# load pima indians dataset
dataset = numpy.loadtxt("pima-indians-diabets.csv",delimiter=",")

# splite into input(X) and output(Y) variables
X = dataset[:,0.8]
Y = dataset[:,8]

# create model
model = Sequential()
model.add(Dense(12,input_dim=9,init='uniform',activation='relu'))
model.add(Dense(8,init='uniform',acitvation='relu'))
model.add(Dense(8,init='uniform',acitvation='sigmoid'))

# compile model
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy']

# Fit the model
model.fit(X,Y,validation_split=0.33,nb_epoch=150,batch_size=10)

# evaluate the model
scores = model.evaluate(X,Y)
print("%s:%.2f%%"%(model.metrics_name[1],scores[1]*100)

运行这个例子,你能看到每次迭代的详细输出,显示在训练集和验证集上的损失和精度。

Epoch 147/150  
514/514 [==============================] - 0s - loss: 0.4864 - acc:0.7743 - val_loss:0.5604 - val_acc: 0.7244 

Epoch 148/150
514/514 [==============================] - 0s - loss: 0.4831 - acc:0.7665 - val_loss: 0.5589 - val_acc: 0.7126

Epoch 149/150  
514/514 [==============================] - 0s - loss: 0.4961 - acc:0.7782 - val_loss:0.5663 - val_acc: 0.7126 

Epoch 150/150
514/514 [==============================] - 0s - loss: 0.4967 - acc: 0.7588 - val_loss: 0.5810 - val_acc: 0.6929

2.2 使用手动验证集

Keras 也允许你在训练时指定验证集。在这个例子中,我们使用来自Python中 scikit-learn 机器学习库的train_test_split() 函数将数据分成训练集和测试集。我们使用67%作为训练集,剩下33%作为验证集。验证集可以keras中的fit() 函数中validation_data 参数指定。它需要一组输入和输出数据集。

# create your first MLP in Keras

from keras.models import Sequential
from keras.models import Dense
from sklearn.model_selection import train_test_split
import numpy

# fix random seed for reproducility
seed = 7
numpy.random.seed(seed)

# load pima indians dataset
dataset = numpy.loadtxt("pima-indians-diabets.csv",delimiter=",")

X_train,X_test,y_train,y_test = train_test_split(X,Y,test_size=0.3,random_state=seed)

# splite into input(X) and output(Y) variables
X = dataset[:,0.8]
Y = dataset[:,8]

# create model
model = Sequential()
model.add(Dense(12,input_dim=9,init='uniform',activation='relu'))
model.add(Dense(8,init='uniform',acitvation='relu'))
model.add(Dense(8,init='uniform',acitvation='sigmoid'))

# compile model
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy']

# Fit the model
model.fit(X_train,y_train,validation_data=(X_test,y_test),nb_epoch=150,batch_size=10)

# evaluate the model
scores = model.evaluate(X,Y)
print("%s:%.2f%%"%(model.metrics_name[1],scores[1]*100)

与之前一样,运行该示例,提供了详细的训练输出,其中包括模型在每次迭代的训练和验证数据集上的损失和准确性。

3 手动K折交叉验证

机器学习模型评价的黄金标准是K-折交叉验证。它提供了一个在未知数据上可靠的模型性能估计。它是通过将训练集分成k个子集实现的,在所有子集上轮流训练,除了一个,会在这个除外的验证集上进行模型的评估。这个过程不断的重复,直到所有的模型都有机会作为验证集。性能的测量值是通过所有创建模型的平均值。
交叉验证一般不对深度学习模型进行评估,因为需要较大的计算力。例如,k-交叉验证经常使用5或者10。因此,需要构建和评估5或者10个模型,很大程度上,增加了评估模型的时间。尽管如此,当你的问题足够小或者你有充足的计算资源时,k-交叉验证在模型的性能评估上误差更小。
下面这个例子,我们使用了来自scikit-learn 库中的StratifiedKFold类,将数据分成10折。折是分层的,意味着算法在每层都要平衡每个类的实例数。例子中创建和评价类10个模型,使用的是10份数据集,并收集类所有评分。通过在fit()和evaluate()函数中传verbos=0来关闭每个周期的verbos输出。每个模型的性能被打印出来并存下来。模型性能的平均值和标准差也在运行末尾打印出来,为了提供一个可靠的模型准确度的评估。

# MLP for Pima Indians Dataset with 10-fold cross validation

from keras.models import Sequential  
from keras.layers import Dense  
from sklearn.model_selection import StratifiedKFold  
import numpy  
# fix random seed for reproducibility  
seed = 7  
numpy.random.seed(seed)  
# load pima indians dataset  
dataset = numpy.loadtxt("pima-indians-diabetes.csv", delimiter=",") 

# split into input (X) and output (Y) variables 

X = dataset[:,0:8]  
Y = dataset[:,8]  
# define 10-fold cross validation test harness  
kfold = StratifiedKFold(n_splits=10, shuffle=True, random_state=seed) cvscores = []  
for train, test in kfold.split(X, Y):

 # create model 

model = Sequential()  
model.add(Dense(12, input_dim=8, activation='relu'))  
model.add(Dense(8, activation='relu'))  
model.add(Dense(1, activation='sigmoid'))  
# Compile model  
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) # Fit the model  
model.fit(X[train], Y[train], epochs=150, batch_size=10, verbose=0)  
# evaluate the model  
scores = model.evaluate(X[test], Y[test], verbose=0)  
print("%s: %.2f%%" % (model.metrics_names[1], scores[1]*100)) cvscores.append(scores[1] * 100)

print("%.2f%% (+/- %.2f%%)" % (numpy.mean(cvscores), numpy.std(cvscores)))

运行上面例子至少要跑分钟,将得到下面的结果。

acc: 77.92% 
acc: 68.83% 
acc: 72.73% 
acc: 64.94% 
acc: 77.92% 
acc: 35.06% 
acc: 74.03% 
acc: 68.83% 
acc: 34.21% 
acc: 72.37% 
64.68% (+/-15.50%)

值得注意的是,没错循环我们都不得不重新创建模型,是为了用K折数据拟合和评估它。在接下来的课程中,我们将要学到使用scikit-learn机器学习库的Keras模型。

4 总结

在这节课中给,你已经学习了在未知数据上评估深度学习模型性能方法的重要性。你已经学习三种方法,这三种方法让你能在Python中用Keras 库评估深度学习模型的性能。

  • 自动地分割数据为训练集和验证集
  • 手动而明确定义训练集和验证集。
  • 使用K-折交叉验证评价性能,黄金标准技术。

4.1 接下来

你现在知道如何评价你的模型和估计他们的性能。在接下来课程,你将学习如何将scikit-learn 机器学习库整合到你的Keras模型中。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-07-29 11:38:10  更:2021-07-29 11:38:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/22 10:56:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码