深度学习——神经网络的数据预处理

数据预处理在构建网络模型时是很重要的,往往能够决定训练结果。当然对于不同的数据集,预处理的方法都会有或多或少的特殊性和局限性。在这里介绍三种当前最为普遍被广泛使用的预处理方法。

需要导入numpy库,即:(下同)

import numpy as np

假设数据矩阵X是一个N*D维的矩阵,其中N代表样本数目,D代表数据的维度。

1.零均值

这是数据处理阶段最为常用的方法。顾名思义,就是将每一维原始数据减去每一维数据的平均值,将结果代替原始数据,这就是零均值。在python中这个操作可以写成:

X -= np.mean(X,axis = 0)

2.归一化(normalization)

归一化就是将原始数据归一到相同尺度,当前有两种归一化的方法

  • 第一种就是先将原始数据进行零均值,再将每一维的数据除以每一维数据的标准差,用代码来表示:
X -= np.mean(X,axis = 0)
X /= np.std(X,axis = 0)

  • 第二种就是将不同维度的数据归一到相同的数值区间,例如将每一维数据的最大最小值为1和-1,这种归一化仅仅当你认为不同的维度的数据应该具有相同的重要性的时候。而图片便不存在这种归一化,因为图片像素的范围已经是(0-255),已经是归一化的了。

3.PCA和白化(whitened)

是另一种形式的预处理方法。首先我们将数据变成0均值的,然后计算数据的协方差矩阵来得到数据不同维度之间的相关性:

X -= np.mean(X, axis = 0) # zero-center the data (important)
cov = np.dot(X.T, X) / X.shape[0] # get the data covariance matrix

协方差矩阵的第(i,j)个元素表示数据第i维和第j维特征的相关性,特别地,对角线上的元素表示方差。另外,协方差矩阵是对称并且半正定的。我们可以对上述协方差矩阵进行SVD分解: 

U,S,V = np.linalg.svd(cov)

其中U矩阵的列为特征向量,S对角线上的元素是奇异值(等同于特征值的平方)。为了对数据去相关,我们首先将数据(0均值后的)投影到特征向量上:

Xrot = np.dot(X, U) # decorrelate the data

注意U的列是相互正交的向量,也因此它们可以被看成基向量。这种投影相当于将数据X旋转、投影到新的基向量轴上。如果我们再去计算Xrot的协方差矩阵的话,我们会发现它是一个对角阵,说明不同维度之间不再相关。np.linalg.svd的一个很好的特性在于返回的U是按照其特征值的大小排序的,排在前面的就是主方向,因此我们可以通过选取前几个特征向量来减少数据的维度,这就是PCA的降维方法: 

Xrot_reduced = np.dot(X, U[:,:100]) # Xrot_reduced becomes [N x 100] 

In practice.  我们在这里提到PCA和白化是为了completeness,但是这些变换在CNN中并不会用到。但是,对于数据进行0均值处理是非常重要的,归一化也是常见的。 
常见陷阱.  在进行数据的预处理时(比如计算数据均值),我们只能在训练数据上进行,然后应用到验证/测试数据上。如果我们对整个数据集-整个数据集的均值,然后再进行训练/验证/测试数据的分割的话,这样是不对的。正确做法是计算训练数据的均值,然后分别把它从训练/验证/测试数据中减去。




  • 16
    点赞
  • 101
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Keras深度学习实战(15)——从零开始实现YOLO目标检测是一篇非常实用的教程。YOLO(You Only Look Once)是一种流行的实时目标检测算法,其核心思想是将目标检测任务视为回归问题,并通过卷积神经网络实现端到端的检测。这篇教程提供了一步一步的实现代码,让读者能够快速了解并实践YOLO目标检测的方法。 首先,教程介绍了YOLO的工作原理和网络结构。YOLO将输入图像划分为多个网格,每个网格负责预测包含在该网格中的目标。每个网格预测包含目标的方框的位置和类别,以及目标的置信度。 接下来,教程详细介绍了如何实现YOLO的网络结构。使用Keras库,创建了一个具有卷积和池化层的卷积神经网络。还使用了Anchor Boxes,用来预测不同比例和宽高比的目标。 教程还介绍了如何预处理输入图像,包括将图像调整为适当的大小,并将目标边界框转换为YOLO需要的格式。然后,选择了合适的损失函数,训练了模型,以及进行了模型评估和预测。 最后,教程提供了一些改进和扩展的思路,包括使用更大的数据进行训练、调整网络结构和超参数等等。 通过这篇教程,读者可以了解到YOLO目标检测的基本原理和实现步骤。并且,使用Keras库可以很方便地实现和训练自己的YOLO模型。无论是对于已经有一定深度学习基础的读者,还是对于刚刚开始学习的读者,这篇教程都是非常有价值的参考资料。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值