CNN训练

CNN训练技巧

实现完成神经网络,通常需要验证网络的参数是否正确,通常有以下步骤:
1、检验前向传播的实现是否正确

  • 采用很小的数据去验证
  • 关闭正则项,若是softmax损失则loss值应当为log(C),其中C为类别数,若是muti-svm损失,则loss值应为C-1(若bias为1时);打开正则项loss应变大

2、检查反向传播实现是否正确
*用很小的人造数据(random),较小的隐含层的个数,利用 数值梯度来验证函数梯度是否正确,数值梯度的实现

def eval_numerical_gradient(f, x, verbose=True, h=0.00001):
  """ 
  a naive implementation of numerical gradient of f at x 
  - f should be a function that takes a single argument
  - x is the point (numpy array) to evaluate the gradient at
  """ 

  fx = f(x) # evaluate function value at original point
  grad = np.zeros_like(x)
  # iterate over all indexes in x
  it = np.nditer(x, flags=['multi_index'], op_flags=['readwrite'])
  while not it.finished:

    # evaluate function at x+h
    ix = it.multi_index
    oldval = x[ix]
    x[ix] = oldval + h # increment by h
    fxph = f(x) # evalute f(x + h)
    x[ix] = oldval - h
    fxmh = f(x) # evaluate f(x - h)
    x[ix] = oldval # restore

    # compute the partial derivative with centered formula
    grad[ix] = (fxph - fxmh) / (2 * h) # the slope
    if verbose:
      print ix, grad[ix]
    it.iternext() # step to next dimension

  return grad

3、过拟合数据
一个很好的思路是,当数据量很小的时候,网络应该能够过拟合数据,即有很高的训练精度,而有较低的测试精度

库、包

1、Caffe
Caffe是来自于UC-Berkeley,书写是用C++完成的,可以关联python和matlab,很适合训练向前传播的模型或者对这类模型调参。但Caffe的资料好多都已过期,最好是读取源码。Caffe的结构如下:
这里写图片描述
利用Caffe的训练流程:
这里写图片描述
Caffe优缺点:
a)适合前向传播的网络(如CNN)
b)适合对已经存在的网络调参
c)训练模型不用写代码
d)python接口很有用也很方便
e)对于GPU 层需要用C++/cuda书写代码
f)不适合循环网络
g)对于大型网络,显得很笨重(如GoogleNet、ResNet)
2、Torch
Torch来自于NYU+IDIAP,用C和 Lua书写,在facebook、DeepMind中使用较多。
a)Tensor
Torch中的Tensor类似与python的numpy,操作数据很方便。
b) nn
使用nn模块很容易创建和训练网络
流程:
这里写图片描述
Torch的优缺点:
a)lua语言需要学习
b)模型的变化性不如Caffe(训练的代码需要自己书写)
c)很多模块组合起来很容易
d)很容易书写自己的网络层,在GPU上运行
e)代码可读性强
f)很多预训练的模型
g)不太适合RNN
3、 Theano
来自于蒙特利尔大学的 Yoshua Bengio,依此产生的高级外包KerasLasagne
Theano优缺点:
这里写图片描述
4、TensorFlow
优缺点:
这里写图片描述
几种包的对比:
这里写图片描述
建议:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值