用Keras解决机器学习问题!
Datawhale干货
作者:皮钱超,厦门大学,Datawhale成员
深度学习框架Keras入门项目
本文介绍3个案例来帮助读者认识和入门深度学习框架Keras。3个案例解决3个问题:回归、二分类、多分类.
本文审稿人:牧小熊,Datawhale成员
Keras官网
为什么选择Keras
相信很多小伙伴在入门深度学习时候首选框架应该是TensorFlow或者Pytorch。在如今无数深度学习框架中,为什么要使用 Keras 而非其他?整理自Keras中文官网:
- Keras 优先考虑开发人员的经验
- Keras 被工业界和学术界广泛采用
- Keras 可以轻松将模型转化为产品
- Keras 支持多个后端引擎
- Keras 拥有强大的多 GPU 和分布式训练支持
- Keras 的发展得到关键公司的支持,比如:谷歌、微软等
详细信息见中文官网:https://keras.io/zh/why-use-keras/
主要步骤
使用Keras解决机器学习/深度学习问题的主要步骤:
- 特征工程+数据划分
- 搭建神经网络模型add
- 查看网络架构summary
- 编译网络模型compile
- 训练网络fit
- 保存模型save
- 评估模型eval(232, 232, 232); background: rgb(249, 249, 249);">
回归案例
回归案例中使用的是Keras自带的波士顿房价数据集。
导入数据
In [2]:
In [3]:
Out[3]:
In [4]:
Out[4]:
In [5]:
Out[5]:
数据标准化
神经网络中一般输入的都是较小数值的数据,数据之间的差异不能过大。现将特征变量的数据进行标准化处理
In [6]:
Out[6]:
针对训练集的数据做标准化处理:减掉均值再除以标准差
In [7]:
针对测集的数据处理:使用训练集的均值和标准差
In [8]:
构建网络
In [9]:
Out[9]:
In [10]:
网络架构
In [11]:
训练网络
In [12]:
保存模型
In [13]:
In [14]:
评估模型
返回的是loss和mae的取值
In [15]:
Out[15]:
history对象
In [16]:
Out[16]:
In [17]:
Out[17]:
In [18]:
查看history.history字典对象中的信息:keys就是每个评价指标,values其实就是每次输出的指标对应的值
In [19]:
Out[19]:
In [20]:
Out[20]:
loss-mae
In [21]:
二分类
使用的是sklearn中自带的cancer数据集
导入数据
In [22]:
部分数据信息截图
数据标准化
In [24]:
Out[24]:
In [25]:
Out[25]:
数据集划分
In [26]:
Out[26]:
In [27]:
Out[27]:
In [28]:
Out[28]:
构建网络
这是一个二分类的问题,最后一层使用sigmoid作为激活函数
In [29]:
网络架构
In [30]:
编译模型
在keras搭建的神经网络中,如果输出是概率值的模型,损失函数最好使用:交叉熵crossentropy
常用目标损失函数的选择:
- binary_crossentropy:针对二分类问题的交叉熵
- categorical_crossentropy:针对多分类问题的交叉熵
两种不同的指定方法:
常用的性能评估函数:
- binary_accuracy: 针对二分类问题,计算在所有预测值上的平均正确率
- categorical_accuracy:针对多分类问题,计算再所有预测值上的平均正确率
- sparse_categorical_accuracy:与categorical_accuracy相同,在对稀疏的目标值预测时有用
In [31]:
训练网络
In [32]:
Out[32]:
In [33]:
评估模型
In [34]:
Out[34]:
可以看到模型的精度达到了惊人的98.2%!
loss-acc
In [35]:
In [36]:
可以看到:随着轮数的增加loss在逐渐降低,而精度acc在逐渐增加,趋近于1
多分类案例
多分类的案例使用sklearn中自带的iris数据集,数据集不多介绍。最终结果是存在3个类的。
导入数据
In [37]:
In [38]:
Out[38]:
In [39]:
Out[39]:
数据标准化
In [40]:
数据集划分
In [41]:
Out[41]:
标签向量化
In [42]:
Out[42]:
In [43]:
In [44]:
Out[44]:
In [45]:
Out[45]:
构建模型
In [46]:
模型编译
多分类问题一般是使用categorical_crossentropy作为损失函数。它是用来衡量网络输出的概率分布和标签的真实概率分布的距离。
In [47]:
训练网络
In [48]:
Out[48]:
In [49]:
评估模型
In [50]:
Out[50]:
loss-acc曲线
In [51]:
In [52]:
上面的方案只是从最基本的流程来学习如何使用Keras框架来进行神经网络的建模,还有很多可以深入学习和挖掘的点:
1. 验证集数据的引入
2. 加入正则化技术,防止模型过拟合
3. 如何评估训练的轮次,使得模型在合适时机停止
4. 激活函数的选择等
作者公众号:尤而小屋