DNN的几点tips

本文介绍了深度神经网络训练中的一些关键步骤,包括数据变换以增强模型泛化能力,预处理以确保输入数据的质量,以及初始化策略对网络性能的影响。这些技巧对于提升DNN模型的准确性和训练效率至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1)数据变换

由于DNN在训练时需要大量的样本数量来获得一个满意的结果,如果图像初始样本过少,最好通过数据变换提升性能。诚然,数据变换是训练之前比不可少的步骤。
有很多数据变换的方法,比如将图像水平翻转、随机切割、图像抖动等。而且你可以结果多种不同的处理方法,比如在旋转的同时随机缩放。也可以把颜色空间的H和V映射到0.25~0.4中(灰度值同理),再乘以一个0.7~1.4的因子,再加上一个-0.1~0.1的值,也可以同时把所有的H值加上一个-0.1~0.1的因子。

2)预处理

现在我们获得了充足的训练样本,接下来这些样本还不能直接作为输入,还要预处理,我们介绍几种方法:
a.均值为零,正规化。
python代码为:
X -= np.mean(X, axis = 0) # zero-center
X /= np.std(X, axis = 0) # normalize

X是输入向量,另一种预处理模式是正规化每个维度到-1~1,这样做是为了保证每个维度的数据在训练时拥有相同的权重系数,如果各个维度的尺度不同,这样做是很有必要的。对于图像,由于每个像素点都是在0~255,所以可以不做这一步。
b.另一种处理方式和第一种类似称作PCA白化,第一步把均值变为0,然后求输入向量的协方差矩阵,这是为了得到各个维度的相关性。python:
X -= np.mean(X, axis = 0) # zero-center
cov = np.dot(X.T, X) / X.shape[0] # compute the covariance matrix


然后通过求协方差矩阵的特征向量解除相关性,python:
U,S,V = np.linalg.svd(cov) # compute the SVD factorization of the data covariance matrix
Xrot = np.dot(X, U) # decorrelate the data


最后一步是白化,除以每个维度特征值来正规化尺度,python:
Xwhite = Xrot / np.sqrt(S + 1e-5) # divide by the eigenvalues (which are square roots of the singular values)
这里,加上一个较小的常量是为了避免分母为0,这个变换的一个缺点是会放大噪声,因为把所有维度的数据都变换为同一尺度,噪声的尺度相对变大,要解决这个问题可以加上一个‘强力平滑滤波器’。
需要注意的是:这些变换对于卷积网络不常用,但是零中心,正规化还是很有必要的。

3)初始化

现在数据已经准备好了,在训练之前要初始化网络参数
a.参数初始化为0
在理想状态下,合适的数据正规化,假设一半权重为正,一半为负是合理的。这是所有权重为0听起来是最佳的选择,但是这实际上是错误的,因为如果每个神经元都产生相同的输出,那么利用‘向后传播’计算梯度也是一样的,导致所有的神经元参数更新一致。
b.随机初始化
如果想让参数接近于0而不等于0,可以给每个神经元随机选择一个接近于0的参数,常用的方法是在0~1内用高斯分布产生一组随机数,使得每个神经元是独特的,梯度的计算不同,参数更新也不同,这对最后的训练模型有些影响。
c.调整方差
上述建议的一个问题是来自随机初始化的神经元的输出的分布具有随输入数量增长的方差。 事实证明,你可以通过它的权重向量乘以其扇入的平方根(即,其输入的数量)缩放每个神经元的输出的方差为1,如下:
其中“randn”是高斯分布,“n”是其输入的数量。 这确保网络中的所有神经元最初具有大致相同的输出分布,并且有效地改善收敛速率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值