Keras深度学习记录3——深度学习工作流程


通过前两个实例
Keras深度学习记录1——从简单的mnist数据集开始
Keras深度学习记录2——电影评论分类(二分类)
可以了解到神经网络如何解决分类问题以及Keras解决深度学习任务的具体工作流程,而且也看到了深度学习的核心难题: 过拟合。本文将这些概念—— 模型评估、数据预处理、特征工程、解决过拟合——整合为七个工作流程。本文后续文字较多,可以只阅读加粗字体文字。

一、深度学习术语

深度学习的分类和回归都包含很多专业术语,以下是一些常用的基本术语。

术语定义
样本(Sample)或输入(Input)进入模型的数据点
预测(predict)或输出(output)模型的输出结果
目标(target)真实值。对于外部数据源,理想情况下,模型应该能够预测出目标
预测误差(predicion error)或损失值(loss value)模型预测与目标之间的距离
类别(class)分类问题中供选择的一组标签。例如,对猫狗图像进行分类时,"狗"和“猫”就是两个类别
标签(label)分类问题中类别标注的具体例子。比如,如果1234号图像被标注为包含类别“狗”,那么“狗”就是1234号图像的标签
真值( ground-truth)成标注( annotation)数据集的所有目标,通常由人工收集
二分类( binary classification)一种分类任务,每个输入样本都应被划分到两个互斥的类利中。
多分类( multiclas classification)一种分类任务,每个输入样本都应被划分到两个以上的类剧中,比如手写数宇分类。
多标签分类(multilabel classfication)一种分类任务,每个输入样本都可以分配多个标签。例如,如果一幅图像里可能既有猫又有狗,那么应该同时标注“猫”标签和“狗"标签。每幅围像的标签个数通常是可变的。
标量回归(scalar rgression)目标是连续标量值的任务。预测房价就是一个很好的例子,不同的目标价格形成一个连续的空间。
向量回归(vetor regression)目标是一组连续值(比如一个连续向量)的任务。如果对多个值(比如图像边界框的坐标)进行回归,那就是向量回归。
小批量(mini-batch)或批量(batch):模型同时处理的一小部分样本(样本数通常为8-128)样本数通常取2的幂,这样便于GPU上的内存分配。训练时,小批量用来为模型权重计算一次梯度下降更新。

二、评估深度学习模型

深度学习的目的是得到可以泛化(generalize)的模型,即在未见过的数据集上也能表现出很好的性能。因此我们经常将数据集划分为训练集、验证集、测试集。比例为0.7、0.2、0.1

2.1 训练集、验证集和测试集

评估模型的重点是将数据划分为三个集合:训练集、验证集、测试集。在训练集上训练模型,在验证集上评估模型,一旦找到模型的最佳参数就在测试集上测试。
那么为什么不是两个集合:一个训练集和一个测试集?在训练集上训练模型,然后在测试集上评估模型。

原因在于开发模型时总是需要调节模型配置,比如选择层数或每层大小[这叫作模型的超参数(hyperparameter),以便与模型参数( 即权重)区分开]。这个调节过程需要使用模型在验证数据上的性能作为反馈信号。这个调节过程本质上就是一种学习: 在某个参数空间中寻找良好的模型配置。因此,如果基于模型在验证集上的性能来调节模型配置,会很快导致模型在验证集上过拟合)即使你并没有在验证集上直接训练模型也会如此。

造成这一现象的关键 在于信息泄露( information leak )。每次基于模型在验证集上的性能来调节模型超参数,都会有-些关于验证数据的信息泄露到模型中。如果对每个参数只调节一次,那么泄露的信息很少,验证集仍然可以可靠地评估模型。但如果你多次重复这一过程(运行一次实验,在验证集上评估,然后据此修改模型),那么将会有越来越多的关于验证集的信息泄露到模型中。

最后,你得到的模型在验证集上的性能非常好(人为造成的),因为这正是你优化的目的。你关心的是模型在全新数据上的性能,而不是在验证数据上的性能,因此你需要使用一个完全不同的、前所未见的数据集来评估模型,它就是测试集。你的模型一定 不能读取与测试集有关的任何信息,既使间接读取也不行。如果基于测试集性能来调节模型,那么对泛化能力的衡量是不准确的。
将数据划分为训练集、验证集和测试集可能看起来很简单,但如果可用数据很少,还有几种高级方法可以派上用场。我

2.1.1 简单的留出验证

留出一定比例的数据作为测试集。在剩余的数据上训练模型,然后在测试集上评估模型如前所述,为了防止信息泄露,你不能基于测试集来调节模型,所以还应该保留一个验证集。**留出验证( hold-out validation)**的示意图
在这里插入图片描述

三、数据预处理、特征工程和特征学习

在将数据输入神经网络之前,我们需要解决一个重要问题:如何准备输入数据和目标?

3.1 神经网络的数据预处理

3.1.1 向量化

神经网络的所有输入和目标都是浮点型张量。任何数据都必须转换为张量,这一步叫做数据向量化

3.1.2 值标准化

在手写数字中,我们将图像编码为0~255范围内的整数,表示灰度值。这么做的原因是在输入数据时,数据中心存在不同的取值范围,有特征点小的浮点数,也有较大的浮点数。因此在输入网络之前,需要对每个特征分别做标准化,使其均值为0、标准差为1。
为了让网络学习更加容易,输入数据应具备以下特性:

  • 取值较小:大部分数据在0~1范围内。
  • 同质性(homogenous):所有的特征取值都应在大致相同的范围内。
    可以使用Numpy实现:
x -=x.mean(axis=0)
x /= x.std(axis=0)

3.1.3 处理缺失值

一般来说,对于神经网络,将缺失值设置为0较为安全,网络从数据中学到0意味着缺失数据,将会忽略这个值。

3.2 特征工程

特征工程(feature engineering)是指在数据输入模型之前,利用你自己对神经网路的知识对数据进行硬编码的变换(不是模型学到的),以改善模型的效果。简单来说,就是用更简单的方式表述问题,从而使问题变得更加容易。而这需要更深入的理解问题。

神经网络能够从数据中自动提取有用的特征,而使用特征工程具有以下两个优点:

  • 良好的特征可以用更少的资源解决问题。
  • 良好的特征可以用更少的数据解决问题。

四、过拟合与欠拟合

机器学习的根本问题是优化和泛化之间的对立。优化是指调节模型在训练数据上得到最佳性能。而泛化是指训练好的模型在未见过的数据上得到最佳性能。训练较少模型会出现欠拟合,而训练时间过长,数据量太少则会导致过拟合。
防止模型过拟合的常用方法包括以下四个:

  • 获取更多的训练数据。
  • 减小网络容量,即在同样效果下选用更加简单的网络。
  • 添加权重正则化。
    • L1正则化和L2正则化
  • 添加dropout
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值