在DNN训练中,dnn模型参数较多,模型复杂,size较大,训练时间较长,下面介绍两种减小model size 的方法:
一、 nodeprune
笔记见图
二、 通过SVD分解,降低数据维数,从而达到降低计算量,降低模型的size的目的(保证性能在可接受的范围内)
1. SVD分解简介
[U,S,V]=svd(A)
若A为m*n,则U为m*m,S为m*n,V为n*n,S的有效值存在对角线上,且非负降序排列
[U,S,V]=svd(A,0)得到一个有效的分解,对于S只是保留对角有值的部分,U,V的维数也随S相应变化。所S为k*n(k<min(m,n)),则U变为m*k,V还是n*n
参照下面例子理解svd
>> A=[1 2;3 4;5 6;7 8];
>> [U,S,V]=svd(A)
U =
S =
V =
>> [U,S,V]=svd(A,0)
U =
S =
V =
2. 依据要求设置S的维数达到数据降维的目的
通常有两种方法:a:直接指定S的维数
b:通过比例因子间接调节S的维数
笔记见图:
注意:做完svd的dnn网络不能直接解码,夹层之间需要添加线性函数(原来层间用的sigmoid函数)
如图:
以后有时间再详细整理