keras深度学习笔记
神经网路的结构
层:多个曾组合成网络(或模型)
输入数据和相应的目标。
损失函数:即用于学习的反馈信号。
优化器:决定学习过程如何进行。
此图可表示展示出网络,层,损失函数和优化器之间的关系。
数据处理
- 标准化:将数据的取值范围限定,即均值为0,方差为1。
- 取值范围小:将数据取值范围限定在0~1。
- one-hot编码:将其转换为0,1值。
- 向量化:将数据格式转换为张量。
- 同质性:所有特征的取值都应该在大致相同的范围内。
- 数据冗余:如果数据中的某些数据点出现了两次(这在现实中的数据里十分常见),那么打乱数据并划分成训练集和验证集会导致训练集和验证集之间的数据冗余。注意,永远不要让你的训练集和测试集产生**交集**。
- 处理缺失值:一般来说,将缺失的数值NAN赋值为0。
- 特征工程:用更简单的方式表述问题,从而使问题变得更容易,例如遗传算法求最短距离时,将距离转化为张量(矩阵)时的处理方式。
这里说一下,深度学习出现之前,特征工程曾经非常重要,因为经典的浅层算法没有足够大的假设空间来自己学习有用的表示。将数据呈现给算法的方式对解决问题至关重要。例如,卷积神经网络在 MNIST 数字分类问题上取得成功之前,其解决方法通常是基于硬编码的特征,比如数字图像中的圆圈个数、图像中每个数字的高度、像素值的直方图等幸运的是,对于现代深度学习,大部分特征工程都是不需要的,因为神经网络能够从原始数据中自动提取有用的特征。
但这不代表不需要特征工程
原因:
1良好的特征仍然可以让你用更少的资源更优雅地解决问题
2良好的特征可以让你用更少的数据解决问题
层的选择
不同的张量格式与不同的数据处理类型需要用到不同的层。
2D 张量:向量数据(samples, features);通常用密集连接层[densely connected layer,也叫全连接层(fully connected layer)或密集层(dense layer),对应于 Keras 的 Dense 类]。
3D 张量:序列数据(samples, timesteps, features);通常用循环层(recurrent layer,比如 Keras 的 LSTM 层)来处理。
4D 张量:图像数据;通常用二维卷积层(Keras 的 Conv2D)来处理。
损失函数
准确率 Accuracy:被用在分类问题上。binary_accuracy:指二分类问题预测的准确率;categorical_accuracy:多分类问题预测的准确率;sparse_categorical_accuracy:针对稀疏目标值预测时使用;top_k_categorical_accuracy:指当前预测值的前k个值中存在目标类别即认为预测正确。
Error loss 误差损失:用于度量预测值与实际观测值之间的差异;
可有如下取值:mse:均方误差;rmse:均方根误差;mae:平均绝对误差;mape:平均绝对百分比误差;male:均方对数误差。
Hinge loss 通常用于训练分类器:有两种取值:hinge 定义为 max(1 - y.true X y.pred , 0);squared hinge 值 hinge 损失的平方值。
class loss : 用于计算分类问题中的交叉熵,存在多个取值:包括二分交叉熵和分类交叉熵。
优化器
优化器——决定如何基于损失函数对网络进行更新。它执行的是随机梯度下降(SGD)的某个变体。
- RMSprop:通常使用的优化器,可以解决大多数问题。
- SGD:随机梯度下降
- Adam:
隐含层的激活函数
- relu:整流线性单元函数,作用是将负值整流为0.
2. sigmoid:将任意值压缩为0-1之间的值,通常用于二分类问题,输出值为分类的概率。
3. tanh:
4. softmax:
评估指标
- accuracy:准确度,常用于分类神经网路。
- MAE:平均绝对误差,常用于回归。
过拟合
但在训练数据上迭代一定次数之后,泛化不再提高,验证指损失先是不变,然后开始变高,验证指标变差。
欠拟合
训练数据上的损失越小,测试数据上的损失也越小。
拟合效果图
图1
此图是调整后的模型和原模型的损失函数的比较:
从图中可以看出,Original model 过拟合出现在4代之前;Smaller model 过拟合出现在6代之前。
图2
图2所展示的是经过调试后即没有出现过拟合也没有出现欠拟合的模型 L2-regularized model 和原模型 Original model 比较,也是我们所需要的模型。
优化
是指调节模型以在训练数据上得到最佳性能(即机器学习中的学习)。
泛化
是指训练好的模型在前所未见的数据上的性能好坏。
降低过拟合
- 获取更多数据
- 减小网络大小:即减少模型中可学习参数的个数,始终牢记:深度学习模型通常都很擅长拟合训练数据,但真正的挑战在于泛化,而不是拟合。我们要做的就是在**容量过大与容量不足**之间要找到一个折中。
- 权重正则化:
L1 正则化(L1 regularization):添加的成本与权重系数的绝对值[权重的 L1 范数(norm)]成正比。
L2 正则化(L2 regularization):添加的成本与权重系数的平方(权重的 L2 范数)成正比。神经网络的 L2 正则化也叫权重衰减(weight decay)。 - dropout 正则化
dropout 是神经网络最有效也最常用的正则化方法之一,它是由多伦多大学的 Geoffrey Hinton和他的学生开发的。原理是来自于银行的防欺诈机制。在每个样本中随机删除不同的部分神经元,即引入噪声,以此可以阻止它们的阴谋,因此可以降低过拟合。
总结
- 随着训练的进行,神经网络最终会过拟合,并在前所未见的数据上得到更差的结果。
- 如果训练数据不是很多,应该使用只有一两个隐藏层的小型网络,以避免严重的过拟合。
- 如果可用的数据很少,使用 K 折验证可以可靠地评估模型。
- 如果数据被分为多个类别,那么中间层过小可能会导致信息瓶颈。
使用预训练的神经网路
- 提取特征:需要冻结模型,模型用于提取特征
- 微调模型:卷积基中更靠底部的层编码的是更加通用的可复用特征,而更靠顶部的层编码的是**更专业化**的特征。微调这些更专业化的特征更加有用
卷积神经网络的可视化
- 可视化卷积神经网络的中间输出(中间激活):有助于理解卷积神经网络连续的层如何对输入进行变换,也有助于初步了解卷积神经网络每个过滤器的含义。
- 可视化卷积神经网络的过滤器:有助于精确理解卷积神经网络中每个过滤器容易接受的视觉模式或视觉概念。
- 可视化图像中类激活的热力图:有助于理解图像的哪个部分被识别为属于某个类别,从而可以定位图像中的物体。