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 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 深度学习入门系列4:使用keras模型与scikit-learn库进行通用机器学习 -> 正文阅读

[人工智能]深度学习入门系列4:使用keras模型与scikit-learn库进行通用机器学习

系列文章目录

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


在Python中,scikit-learn库是通用机器学习中最流行的库。这节课你将学习在Python中如何用Keras中的scikit-learn 库来使用深度学习模型。完成这节课后,你讲了解:

  • 如何使用scikit-learn 机器学习库封装Keras模型来使用。
  • 如何使用scikit-learn 中交叉验证轻松评价Keras模型。
  • 如何使用scikit-learn 中网格搜索法(grid search)调节Keras模型参数。

让我们开始吧

1 概述

Keras 是Python中一个流行的深度学习库,但是它的库目标是深度学习。实际上,它力求简单,只关注您需要的东西,让你能够快速而又简单地定义和构建深度学习模型。Python中scikit-learn 库是在Scipy上构建的,它提供了有效的数字计算。对于一般用途机器学习,它是一个功能齐全库,提供了很多在深度学习中有用的工具。至少提供了:

  • 使用重采样方法评价模型,如k-折交叉验证。
  • 模型超参数的有效搜索和评价。

Keras 为深度学习模型提供便利的封装,用于在scikit-learn中的分类或回归的估计。在接下来的部分中, 我们将研究使用KerasClassifier的示例,包含在Keras创建分类神经网络并在scikit-learn库中使用。测试的问题是Pima Indians 糖尿病分类数据集。

2用交叉验证评价模型

Keras 中 KerasClassiferKerasRegressor类的输入参数build_fn,需要传入创建模型的函数名。不管它是定义模型,编译它还是返回它,你必须定义一个函数。在下面例子中,我们定义create_model() 函数,它针对这个问题创建一个简单的多层神经网络。

我们通过build_fn参数把函数名传给KerasClassifier类,我们也传了nb_epoch=150batch_size=10其他参数。这些都是自动捆绑在一起的并传到fit() 函数,而这个函数是通过KerasClassifier 类内部调用的。在这个例子中,我们使用了scikit-learn中StratifiedKFold执行10折分层交叉验证。这是一个重采样技术,它能够在位置数据上提供一个强大的机器学习性能评估。我们使用scikit-learn中cross_val_score 函数和交叉验证模式来评价我们模型并打印出结果。


import tensorflow as tf

from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Dense
from tensorflow.python.keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import StratifiedKFold
from sklearn.model_selection import cross_val_score

import numpy

def create_model():  
	# create model   
	model = Sequential()   
	model.add(Dense(12, input_dim=8, init='uniform', activation='relu'))   
	model.add(Dense(8, init='uniform', activation='relu'))   
	model.add(Dense(1, init='uniform', activation='sigmoid'))   
	# compile model   
	model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])   
	return model

# fix random seed for reproduciblity
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]
# create model
model = KerasClassifier(build_fn=create_model, nb_epoch=150, batch_size=10, verbose=0)
kfold = StratifiedKFold(n_splits=10, shuffle=True, random_state=seed)
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

运行例子会显示所用的配置,总共有10个模型要创建和要评价并展示最后的平均精度。

0.731715653237

与之前课程中手动折数的交叉验证相比,你能看到被封装的Keras 模型被已经被流水线化了。

3 网格搜索(Grid Search)深度学习模型的参数

上面的例子展示了,封装Keras深度学习模型并在scikit-learn库的函数中使用它是多么方便。在这个例子中,我们会更进一步。我们已经知道我们可以为fit() 函数提供参数。当我们创建KerasClassifier封装器时,可以通过参数build_fn的指定函数。我们能使用这些参数进一步自定义模型结构。

在这个例子中,对于我们神经网络模型,我们使用网格搜索法评价不同配置,而且暂时最佳评估性能的组合。create_model() 函数定义了两个参数,optimizerinit,都必须有默认值。这允许我们评估网络的不同优化算法和权重初始化模型的效果。创建模型之后,我们定义一系列我们想搜索的参数,具体地如下:

  • 优化器(optimizer):搜索不同权重值。
  • 初始化(Initializer):使用不同模式初始化网络权重。
  • 迭代次数(epoches):对于不同大小的数据集,训练模型的迭代次数。
  • 批处理(batch):用于在权重更新之前,改变样本数量。

这些设置放在字典而且被传到scikit-learn 的GridSearchCV配置中。对于优化器,初始化,迭代次数,批量大小的组合,这个类将要通过每一组参数组合(2×3×3×3)评价我们的神经网络。每个组合使用默认的3-折分层交叉验证来评价。会有许多模型和计算,这不是你轻易使用的模式,因为需要花时间计算。在数据集的子集上设计一个小的实验并在合理的时间完成是非常帮助的。由于网络小,数据小,在这种情况下,这个实验是合理的(少于1000个实例和9个属性)。最后,将展示模型配置的最好性能和组合,然后是所有配置组合的性能。

# MLP for Pima Indians Dataset with grid search via sklearn 

from keras.models import Sequential  
from keras.layers import Dense  
from keras.wrappers.scikit_learn import KerasClassifier from sklearn.model_selection import GridSearchCV

import numpy

# Function to create model, required for KerasClassifier 

def create_model(optimizer='rmsprop', init='glorot_uniform'):  
	# create model  
	model = Sequential()  
	model.add(Dense(12, input_dim=8, kernel_initializer=init, activation='relu')) 
	model.add(Dense(8, kernel_initializer=init, activation='relu'))
	model.add(Dense(1, kernel_initializer=init, activation='sigmoid'))
	# Compile model 
	model.compile(loss='binary_crossentropy', optimizer=optimizer, metrics=['accuracy']) 
	return model

# 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]  
# create model  
model = KerasClassifier(build_fn=create_model, verbose=0)  
# grid search epochs, batch size and optimizer  
optimizers = ['rmsprop', 'adam']  
inits = ['glorot_uniform', 'normal', 'uniform']  
epochs = [50, 100, 150]  
batches = [5, 10, 20]  
param_grid = dict(optimizer=optimizers, epochs=epochs, batch_size=batches, init=inits) grid = GridSearchCV(estimator=model, param_grid=param_grid)  
grid_result = grid.fit(X, Y)  
# summarize results  
print("Best: %f using %s" % (grid_result.best_score_, grid_result.best_params_))  
means = grid_result.cv_results_['mean_test_score']  
stds = grid_result.cv_results_['std_test_score']  
params = grid_result.cv_results_['params']  
for mean, stdev, param in zip(means, stds, params):
	print("%f (%f) with: %r" % (mean, stdev, param))

这个在你的工作站的CPU上可能需要5分钟。运行例子的结果如下。我们看到使用均匀分布初始化,rmsporp优化器,150迭代次数和5批量大小网络搜索法在这个问题上获得最好的交叉验证结果大概为75%。

 Best:
0.752604 using {'init': 'uniform', 'optimizer': 'adam','batch_size': 5, 'epochs': 150}
0.707031 (0.025315) with: {'init': 'glorot_uniform', 'optimizer': 'rmsprop', 'batch_size': 5, 'epochs': 50}
0.589844 (0.147095) with: {'init': 'glorot_uniform', 'optimizer': 'adam', 'batch_size': 5, 'epochs': 50}
0.701823 (0.006639) with: {'init': 'normal', 'optimizer': 'rmsprop', 'batch_size': 5, 'epochs': 50}
0.714844 (0.019401) with: {'init': 'normal', 'optimizer': 'adam', 'batch_size': 5, 'epochs': 50} 
0.718750 (0.016573) with: {'init': 'uniform', 'optimizer': 'rmsprop', 'batch_size': 5,
...
'epochs': 50}

4 总结

在这节课中,你已经学习了如何封装Keras深度学习模型并在scikit-learn 通用机器学习库中使用它们。你已经学到:

  • 特别是,如何封装Keras模型以至于它们能够在scikit-learn 机器学习库中使用。
  • 在scikit-lean中,作为评估模型的一部分,如何使用已经封装的模型。
  • 如何在使用已封装的Keras模型的scikit-learn中调节参数。

你看到了,使用scikit-learn的标准机器学习操作-如模型评估和参数优化-要比你自己实现这些模式更节省时间。

4.1 接下来

你现在已经了解了如何最好集成Keras模型到scikit-learn机器学习库中。现在是时候测试你的新技能了。在接下来的几章中,你将实操并一步步的开发Keras神经网络模型,接下来从多分类问题开始。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-03 11:10:51  更:2021-08-03 11:14:35 
 
开发: 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 15:07:58-

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