1.训练样本的分布

交叉验证指的是训练集和验证集,为了防止在训练过程中受到部分训练样本的影响

一般当样本数目较少时,采用60/20/20的比例,60%的训练集,20%的验证集,20%的测试集
当样本数目较大时,一般可以采用2.5%的验证集和1%的测试集,其他都是训练样本。

很多情况下,我们会不适用测试集,这样的训练集叫做训练验证集

 

2.偏差和方差

当在训练集的准确度很高,在验证集或者测试集的准确度很差时,称为过拟合,即高方差

当在训练集的准确度很差时,称为欠拟合,即高偏差

一般较好的都是训练集的错误率在0.5%,测试集或者验证集的1% 

高偏差的解决方法,采用更加大的神经网络进行训练

高方差的解决方法,使用更多的数据进行训练,提高模型的泛化能力,或者就添加正则化,防止过拟合的情况出现

 

3.正则化

L2 regulation 正则化:

   加上 dw = (from backpop) + λ/m*w 

   w[l] = w[l] - dw * a   a表示学习率

   当λ 很大时, w[l]会变得很小

   Z[l] = w[l]*A[l-1] +b[l]

   当Z趋于很小时,tanh(Z)的值处于一个较小值,这个时候的方程趋于线性,防止了过拟合状况的出现

dropout 正则化

   在参数进行更新时,随机的关闭一部分的神经元

   d3 = np.random.rand(a3, shape[0], shape[1])  < keep-prob

   a3 = np.multiply(a3, d3)

   a3 / = keep-prob  保证期望值不变

   dropout 会压缩权重,导致每个神经元的权重都接近,在我们查看损失函数的时候,一般都会先关闭dropout

import numpy as np

a=[np.random.random() for x in range(6)]

temp=(np.random.random()>0.5 for x in range(np.shape(a)[0]))
temps = []
for i in temp:
    temps.append(i)

a = np.multiply(a, temps)

 

其他正则化方法

    数据扩增:水平翻转图片,进行随意的裁剪,

    采用Eealy stop ,当损失函数的值出现多次上升时,停止迭代,取第一次上升时的前一次的参数

 

4.正则化输入
     对样本参数采用归一化输入
                首先去均值,使得数据的均值为0 

                然后处于样本的方差,使得样本的均值为0,方差为1, 可以使得各个参数的分布都处于一个接近的范围内

 

5.梯度消失或梯度爆炸

      当g(Z) = Z 

      y = X * w[1]*w[2]*w[3]*w[4].....

      当W[l]>1时,深度很深时, 激活函数以指数上升就会出现梯度爆炸

      当W[l] < 1时,深度很深时, 激活函数以指数下降就会出现梯度消失
.梯度消失或梯度下降的初步解决方法

      神经网络权重初始化

      w[l] = np.random.randn(shape) * np.sqrt(2/n[l-1])  n[l-1] 表示当前层神经元的个数

6. 梯度检验

    使用双边误差做梯度检验, 确保backpop正确

   对参数进行梯度检测

         dθapper[i] = (J(θ1, θ2, ...θi+ξ, ) -  J(θ1, θ2, ...θi-ξ, )) / 2

   check = (dθapper[i] - dθ) / (dθapper[i] + dθ) =10-7 

可以检测神经网络的错误

import numpy as np

def sigmoid(z):
    return 1./(1+np.exp(-z))

# 定义dA/dz函数的导数
def sigmoid_prime(z):
    return sigmoid(z) * (1-sigmoid(z))


def check_gradient(f, x0, epsilon):
    return (f(x0+epsilon) - f(x0-epsilon)) / 2.0 / epsilon



x0 = np.array([1, 2, 3])
epsilon = 1e-4
print(sigmoid_prime(x0))
print(check_gradient(sigmoid, x0, epsilon))

 

posted on 2018-09-25 13:59  python我的最爱  阅读(522)  评论(0编辑  收藏  举报