cs231n Convolutional Neural Network 笔记
来源:互联网 发布:数据库中通配符! 编辑:程序博客网 时间:2024/05/21 09:41
CNNs: Architectures, Convolution / Pooling Layers
CovNet Layers
ConvNet 显示地假设输入是图片,卷积池化等操作大大减少了参数,比一般的全连接网络计算更高效。CNN 里具体有下面的几种结构,
卷积层, Convolutional Layer
- Dilated convolutions 就是做点乘的时候,也有个stride,而不是连续的九宫格
池化, Pooling Layer
- Pooling Layer 往往加在两个连续的卷积之间,能有效减少空间大小和计算量,而且能控制过拟合。
- 有些生成模型不需要池化,如 VAEs(variational autoencoders), GANs
- overlapping pooling,就是 stride 有重叠
- max-pooling
- average-pooling
- L2-norm pooling
ReLU, Activation Layer
- 全连接层, Fully Connected Layer
从输入到 feature map 大小计算公式如下,
feature_map_size = ( input_size - filter_size + 2 * padding ) / stride + 1
- input_size 如 ImageNet 的图片是 224 x 224 x 3
- filter_size 卷积核大小,必须是奇数,如 3x3
- padding 在图片的边界的填充的大小,可以取 0
- stride 在 Pooling 层的步伐大小,比如 1
怎么理解 CNN 中的权值共享和局部感受野的概念?
- 其实就是很多的不同的卷积核沿着整个输入图片的卷积操作。
怎么理解卷积核数量和feature map数量是对应的?
- 同一个卷积核的 depth 和输入的 depth 是一致的,但是是在所有的通道上做卷积运算后加起来,因此得到的feature map是单通道的
- 所以有通过 1x1 的卷积核来降低通道的做法。
ConvNet Architectures
一般的CNN可以这么搭建,
INPUT -> [ [CONV -> ReLU ] * N –> POOL? ] * M –> [ FC -> ReLU ] * K –> FC
为什么想要多层的小的卷积核?
- 现在的模型更倾向于用更多更深的小卷积核而非单层的大卷积,比如三层3x3的卷积层(带池化吧?可是文中没有提到)就可以有7x7一样的感受野范围,但是由于三层之间加了非线性的激活函数,所以表达能力更强一些。且用的卷积核参数更少。
- 唯一的缺点就是,如果要做反向传播的话,需要更多的内存来保留中间激活值。
Case Studies
misc/miscellaneous 混杂的,杂项的参数
参数与内存大小
- 基本上把参数的个数算一下转换成byte,乘以4(float浮点数),或者乘以8(double),就是参数占用的内存大小
- 如果减小batchsize能很大程度上减少内存大小,说明这个模型中的激活值占了很大比重。
Understanding and Visualizing CNNs
关于神经网络模型是否具有可解释性(interpretable),可以通过可视化来探讨。
- Visualize feature map
- 随着训练的进行,ReLU层后的激活值从 blooby and dense 从 sparse and localized
- Visualize weights(filters)
- nice and smooth filters without any noisy patterns
- 把能很大程度上激活某些神经元的输入收集起来,能发现一些特点,比如某些神经元只对眼睛感兴趣,某些神经元只对房子感兴趣等。
有些人认为,神经元(ReLU neuros) 不一定会有语义信息(semantic meaning),也可能只是图片块的空间表示的向量基底而已。(it is more appropriate to think of multiple ReLU neurons as the basis vectors of some space that represents in image patches)
t-SNE
t-SNE 可以将原始的图片嵌入到二维的空间内,同时保持他们在低维的距离和在高维的距离是一样的。低位的相似度关注的是语义和标签类,而非像素点和颜色。
Tansfer Learning and Fine-tuning CNNs
实际应用中,一般很少白手起家地(from scratch)训练一个CNN,因为数据集往往都不够大。更好的做法是,用别人训练好的模型作初始化,或者特征提取器。
卷基层作为特征提取器
直接把训练好的模型,如AlexNet的最后一层的分类器去掉,然后接一个自己的分类器,每次反向传播的时候,并不调整原来的权重。提取的特征,比如 2048D 的向量,称作是CNN code
精确调参的卷积(Fine-turning the ConvNet)
就是说在用别人的模型时,继续训练参数;当然也可以控制前几层的参数固定,调整后面高层的网络。
Caffe library 有个 Model Zoo 【link1 and link2】,人们可以分享他们的模型 checkpoints
什么时候和怎么精确调参?
实际经验和建议
- 预训练的模型的限制 CNN的参数,其实对输入的图片的大小没有强制性的限制,因为卷基层保留的参数都是卷积核
- fine-tuned 的时候,用较小的学习率
- cs231n Convolutional Neural Network 笔记
- cs231n neural network 笔记
- 【CS231n笔记】07 Convolutional Neural Networks
- 【CS231n winter2016 Lecture 7 (Convolutional Neural Network)】
- 【Meachine Learning】笔记:Convolutional Neural Network
- CS231N-5-Convolutional Neural Networks
- 学习笔记6 Supervised Convolutional Neural Network 之 Convolutional Neural Network
- Convolutional neural network
- convolutional neural network
- Convolutional Neural Network
- CNTK学习笔记 -- Computation Network part3 -- Convolutional Neural Network
- CS231n笔记2--Fully Connected Neural Network与Activation Function
- [论文笔记] CRNN(Convolutional Recurrent Neural Network)_2015 学习笔记
- CS231N-Lecture4 Backpropagation&Neural Network
- CS231N-Lecture5 Training Neural Network
- CS231N-10-Recurrent Neural Network
- 【论文笔记】Image Classification with Deep Convolutional Neural Network
- 论文《A Convolutional Neural Network Cascade for Face Detection》笔记
- PPM和PWM
- 修改字体大小
- curl命令详解
- task_struct结构体成员小结
- 添加ssh公钥到远程主机授权文件
- cs231n Convolutional Neural Network 笔记
- iOS之去除UITableView底部多余行及分割线
- Chrome开发者工具不完全指南(四、性能进阶篇)
- Spring事务的“坑”
- MySQL必知必会-23MySQL全球化和本地化
- Spark SQL 编程示例
- 学习笔记----设计模式之动态代理+工厂模式的混合使用简单demo
- Ext 行高亮
- android studio碰到的问题