- 必须掌握的:
- 层次结构
- 层次结构里面使用的激活函数
-
如果用CNN,预处理一般做“**去均值”和“归一化”**就好了。它的底层是openCV,(scilearn底层是numpy,可以用sklearn做机器学习,也可以用numpy做机器学习)可以用CNN做图像处理,也可以用openCV做图像处理;用openCV做图像处理还要做PCA、白化,而CNN的卷积层的效果就能达到pac和白化的效果,所以不需要另外在做PCA和白化;所以建议:对数据特征进行预处理,去均值、归一化.
-
Pooling Layer(池化层):压缩数据和参数的量,减小过拟合;一般采用最大池化;
-
FC(全连接层):两层之间所有神经元都有权重连接,在CNN中,一般会出现在尾部。它的作用是:将所有之前卷积得到的局部的特征信息进行整合得到一个全局信息。
-
Batch Normalization Layer:不容易导致神经元饱和,但是层次较深加BN的话,模型训练速度很慢,慎用!!
-
卷积神经网络-参数初始化:
- 权重初始化 :一般 很小的随机数,服从均值为零,方差(建议 2/n(n为权重,参考论文:https://arxiv.org/pdf/1502.01852.pdf))的高斯分布随机数;
- 偏置项初始化:一般设置为0,在存在ReLU激活函数的网络中,设置为一个很小的数,尽量避免出现死神经元,梯度消失。
-
过拟合问题的解决方式:
- 方式一:Regularization:通过正则化 降低模型复杂度,降低过拟合,主要有L1和L2;
- 方式二:Dropout:通过随机删除神经网络中的神经元来解决overfitting问题,每次迭代时,只使用部分神经元训练模型获取W和d值,参考:《Dropout: A Simple Way to Prevent Neural Networks from Overfitting》
- Dropout直接更改神经网络结构,不仅减少了过拟合,还提高准确率,所以在深层次的网络中,经常会做Dropout。 一般加在卷积层前?
- L1不建议使用,相比可以用L2,但是L2之前,不要用dropout。
ps:
1.什么是死神经元? 神经元的节点输出就是0,没有判断价值了。
2. 模型中偏置项如果有的话,在哪里用?
3. 池化层误差反向传播,怎么表示?
4. dropout会增加训练时间,为什么?
dropout会增加训练时间是因为删除一些神经元之后,相应的提取出来的特征也被删除了,相当于现在的拟合能力降低了,也就是预测正确率也降了点,在学习过程中,特别是在前面的时候学习率增长的比较慢,(相当于原来迭代1000次能达到准确率96%,现在迭代1000次达到87%,需要更长时间的迭代次数才能达到原来迭代1000达到的效果),但是实际上对效果没什么影响,只会变好。
- 一组卷积得到一组feature map,有多少卷积就得到多少feature map;
- 为了协调,一般在训练集上做什么,就在测试集上做什么,比如训练集做某方面的数据增强,测试集也做,可以提升一点性能;同样的标准,增大数据量,降低过拟合;
- 图像处理的python库: OpenCV、PIL、matplotlib、tensorflow等;
- 深度学习训练过程中,过拟合----泛化能力太差,主要通过正则化项、dropout等降低过拟合; 欠拟合------主要是特征提取不充足,主要通过增加神经元节点,增加网络结构来解决;
- 一般深度学习的学习率不是固定不变的,呈指数下降;
- -------------------------神经元数目怎么算?
- ResNet 中的残差的理解?
- GoogleNet 网络图
- 一般用VGG,因为网络编程简单。