神经网络调试出现的问题

1.输出结果与标签类型不一样,也不能算正确。

2.numpy-array数组进行比较  https://blog.csdn.net/ztf312/article/details/50708302

3.

L1,L2正则化的参数,也就是很多深度学习框架里面的wd参数,一般默认是0.0001,调整正则化的参数可以根据模型表现来,过拟合的时候可以适当加大系数,非过拟合的时候可不调这个参数,毕竟跑一次模型得花不少时间。epoch,应该要和模型表现搭配,如果你的模型已经过拟合了,你就没必要继续跑了;相反,如果你的epoch太小,你epoch跑完了,模型的loss还在下降,模型还在优化,那么你这个epoch就太小了,应该增加。


作者:Miracle
链接:https://www.zhihu.com/question/29641737/answer/243982984
来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


4.随机梯度下降是建立在batch基础上的,合适的batch size对你模型的优化是比较重要的,这个参数倒不需要微调,在一个大致数量即可,常取2的n次方,太大的batch size会受GPU显存的限制,所以不能无限增大。在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。Batch_Size 增大到一定程度,其确定的下降方向已经基本不再变化。

5.初始学习率很重要,学习率的变化策略也很重要,你真正跑过数据就会发现其中的奥秘,适当时候可微调,一般在0.1到0.00001范围,根据具体情况定。

6.np.where使用:根据条件生成新的数组

np.where(cond,xarr,yarr)

np.where 函数是三元表达式

这里x,y是可选参数,condition是条件,这三个输入参数都是array_like的形式;而且三者的维度相同

当符合条件时是x,不符合是y,常用于根据一个数组产生另一个新的数组。

当conditon的某个位置的为true时,输出x,否则y。

如果只有参数condition,则函数返回为true的元素的坐标位置信息;

np.max 与 np.maximum

比较二者的参数部分:

  • np.max:(a, axis=None, out=None, keepdims=False)
    • 求序列的最值
    • 最少接收一个参数
    • axis:默认为列向(也即 axis=0),axis = 1 时为行方向的最值;
  • np.maximum:(X, Y, out=None)
    • X 与 Y 逐位比较取其大者;
    • 最少接收两个参数

7.欠拟合、过拟合及其解决方法

https://blog.csdn.net/willduan1/article/details/53070777

bias和variance的概念。模型的Error = Bias + Variance,Error反映的是整个模型的准确度,Bias反映的是模型在样本上的输出与真实值之间的误差,即模型本身的精准度,Variance反映的是模型每一次输出结果与模型输出期望之间的误差,即模型的稳定性。

训练的过程和阶段可以分为3个阶段:

欠拟合:模型没有很好地捕捉到数据特征(训练集和验证集的loss都大于0.3)。

刚刚好:模型已经完成了我们的任务,满足要求(训练集和验证集上的loss都小于0.01)。

过拟合:模型把数据学习的太彻底,以至于把噪声数据的特征也学习到了(训练集上loss小于0.01,验证集上loss大于0.3)。


8.

通用技巧:
1 Relu:一个很万能的激活函数,可以很好的防止梯度弥散问题,当然最后一层的激活函数千万慎用relu

明确任务目的:如果是连续的用identify(还是叫identity,记不清了),分类的用softmax,拟合回归的话我最后一层也经常不用激活函数,直接wx +b就行

3 Batchnorm:可以大大加快训练速度和模型性能

4 Dropout:(让神经元以一定的概率不工作)防止过拟合,如果不知道怎么设比例的话,就直接设置为0.5

5 Adam:这个优化函数是收敛非常快的一个优化函数



9.数据归一化
转自https://blog.csdn.net/dbat2015/article/details/50008315
https://blog.csdn.net/acdreamers/article/details/44664205
阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭