网站icon怎么设置,网站开发搭建合同,在家做电商怎么做,网站开发下载功能如何实现Keras是Python在深度学习领域非常受欢迎的第三方库#xff0c;但Keras的侧重点是深度学习#xff0c;而不是所以的机器学习。事实上#xff0c;Keras力求极简主义#xff0c;只专注于快速、简单地定义和构建深度学习模型所需要的内容。Python中的scikit-learn是非常受欢迎的… Keras是Python在深度学习领域非常受欢迎的第三方库但Keras的侧重点是深度学习而不是所以的机器学习。事实上Keras力求极简主义只专注于快速、简单地定义和构建深度学习模型所需要的内容。Python中的scikit-learn是非常受欢迎的机器学习库它基于Scipy用于高效的数值计算。scikit-learn是一个功能齐全的通用机器学习库并提供了许多在开发深度学习过程中非常有帮助的方法。例如scikit-learn提供了很多用于选择模型和对模型调参的方法这些方法同样适用于深度学习。 Keras提供了一个Wrapper将Keras的深度学习模型包装成scikit-learn中的分类模型或回归模型以便于使用scikit-learn中的方法和函数。对于深度学习模型的包装是通过KerasClassifier(分类模型)和KerasRegressor(回归模型)来实现的。KerasClassifier和KerasRegressor类使用参数build_fn指定用来创建模型的函数的名称。 Keras的一般构建流程
model Sequential() # 定义模型
model.add(Dense(units64, activationrelu, input_dim100)) # 定义网络结构
#第一层网络:输出尺寸64输入尺寸100activation激活函数relu
model.add(Dense(units10, activationsoftmax)) # 定义网络结构
#第二层网络输出尺寸10输入是上一层的输出尺寸64activation激活函数softmax
model.compile(losscategorical_crossentropy, # 定义loss函数、优化方法、评估标准optimizersgd,metrics[accuracy])
#输入训练样本和标签迭代5次每次迭代32个数据
model.fit(x_train, y_train, epochs5, batch_size32) # 训练模型
loss_and_metrics model.evaluate(x_test, y_test, batch_size128) # 评估模型
classes model.predict(x_test, batch_size128) # 使用训练好的数据进行预测
参数意义 keras.layers.Dense(units, activationNone, use_biasTrue, kernel_initializerglorot_uniform, bias_initializerzeros, kernel_regularizerNone, bias_regularizerNone, activity_regularizerNone, kernel_constraintNone, bias_constraintNone) units: 正整数输出空间维度。 activation: 激活函数。 若不指定则不使用激活函数 (即「线性」激活: a(x) x)。 use_bias: 布尔值该层是否使用偏置向量。 kernel_initializer: kernel 权值矩阵的初始化器。 bias_initializer: 偏置向量的初始化器。 kernel_regularizer: 运用到 kernel 权值矩阵的正则化函数 。 bias_regularizer: 运用到偏置向的的正则化函数 。 activity_regularizer: 运用到层的输出的正则化函数 。 kernel_constraint: 运用到 kernel 权值矩阵的约束函数 。 bias_constraint: 运用到偏置向量的约束函数。 Keras调用scikit-learn实现交叉验证
from keras.models import Sequential
from keras.layers import Dense
import numpy as np
import pandas as pd
from sklearn.model_selection import cross_val_score, KFold
from keras.wrappers.scikit_learn import KerasClassifierdef creat_model():# 构建模型model Sequential()model.add(Dense(units12, input_dim11, activationrelu))model.add(Dense(units8, activationrelu))model.add(Dense(units1, activationsigmoid))# 模型编译model.compile(lossbinary_crossentropy, optimizeradam, metrics[accuracy])return model# 导入数据
data pd.read_csv(data.csv,encodinggbk)# 删除id列
data.drop(客户编号,axis1,inplaceTrue)X, Y data.values[:,:-1], data.values[:,-1] # Keras调用sklearn
model KerasClassifier(build_fncreat_model, epochs150, batch_size10, verbose0)# 10折交叉验证
kfold KFold(n_splits10, shuffleTrue, random_state10)
result cross_val_score(model, X, Y, cvkfold) Keras调用scikit-learn实现模型调参
在构建深度学习模型时如何配置一个最优模型一直是进行一个项目的重点。在机器学习中可以通过算法自动调优这些配置参数在这里将通过Keras的包装类借助scikit-learn的网格搜索算法评估神经网络模型的不同配置并找到最佳评估性能的参数组合。creat_model()函数被定义为具有两个默认值的参数(optimizer和init)的函数创建模型后定义要搜索的参数的数值数组包括优化器(optimizer)、权重初始化方案(init)、epochs和batch_size。
在scikit-learn中的GridSearchCV需要一个字典类型的字段作为需要调整的参数默认采用3折交叉验证来评估算法由于4个参数需要进行调参因此将会产生4✖️3个模型。Keras调用scikit-learn实现GridSearchCV网格搜索
from keras.models import Sequential
from keras.layers import Dense
import numpy as np
import pandas as pd
from sklearn.model_selection import GridSearchCV
from keras.wrappers.scikit_learn import KerasClassifierdef creat_model(optimizeradam,initglorot_uniform):# 构建模型model Sequential()model.add(Dense(units12, input_dim11,kernel_initializerinit, activationrelu))model.add(Dense(units8, kernel_initializerinit, activationrelu))model.add(Dense(units1, kernel_initializerinit, activationsigmoid))# 模型编译model.compile(lossbinary_crossentropy, optimizeroptimizer, metrics[accuracy])return model# 导入数据
data pd.read_csv(data.csv,encodinggbk)# 删除id列
data.drop(客户编号,axis1,inplaceTrue)X, Y data.values[:,:-1], data.values[:,-1] # Keras调用sklearn
model KerasClassifier(build_fncreat_model, verbose0)# 构建需要调整的参数
param_gird {}
param_grid[optimizer] [rmsprop,adam]
param_grid[init] [glorot_uniform, normal, uniform]
param_gird[epochs] [50, 100, 150, 200]
param_gird[batch_size] [5, 10, 20]# 调参
grid GridSearchCV(estimatormodel, param_girdparam_grid)
result grid.fit(X, Y)# 输出结果
print(Best: %f using %s % (result.best_score_, result.best_params_)) 关于Epochs和batch_size的解释 Epochs是神经网络训练过程中的一个重要超参数定义为向前和向后传播中所有批次的单次训练迭代。简单说一个Epoch是将所有的数据输入网络完成一次向前计算及反向传播。在训练过程中数据会被“轮”多少次即应当完整遍历数据集多少次一次为一个Epoch。如果Epoch数量太少网络有可能发生欠拟合即对于定型数据的学习不够充分如果Epoch数量太多则有可能发生过拟合即网络对定型数据中的“噪声”而非信号拟合。所以选择适当的Epoch数量需要在充分训练和避免过拟合之间找到平衡。 假设我们有1000个数据样本每次我们送入10个数据进行训练也就是batch_size为10。那么完成一个Epoch我们需要进行100次迭代也就是100次前向传播和100次反向传播。具体来说我们需要将所有的数据都送入神经网络进行一次前向传播和反向传播所以一次Epoch相当于所有数据集/batch sizeN次迭代。