Deep Learning笔记-1
记录一下学习DL的过程
警示:python是缩进严格的语言!
0.配置环境
以前学爬虫的时候就装了anaconda和pycharm,因此这次直接安装pytorch
比起之前配置ROS的环境简直是小菜一碟,唯一需要注意的可能是官网直接找到的cuda版本不一定匹配,需要再去寻找一下链接。下载pytorch的时候网络不好,最后换了清华源解决问题。
1.pytorch 60分钟入门
这个教程的版本有点老了,现在新的pytorch里已经没有variable
这个类了,所以对应的有些东西都发生了变化,可惜的是我没太看明白 : /
跟着似懂非懂的敲了一遍代码,一方面因为对python本身就不太熟悉,另一方面对ml,numpy都没有接触过,所以学的比较茫然,或者说看完代码并没有太搞清楚自己在干什么。
做了CIFAR10的示例,和上面说的一样似懂非懂。找不到非常详细的注释,我想过一段时间应该再回来返工一次。
2.MNIST数据集实现
知乎上找到了一个注释很详细的代码,边敲边看,最后发现跑不了。上GitHub扒下了最新的代码,得到了结果,但是并没有觉得自己完全理解了,只算是看懂了一部分,学习了一些知识点吧。还要再更细致的学习一下
卷积 (convolution)
卷积层可以理解为一个滤波器,对输入图像处理之后提取出局部的特征,典型案例如用Sobel算子进行边缘检测。从频域的角度考虑,卷积核也是起到对频域信息进行选择的作用。
填充 (padding)
填充有多种类型,目前我看到的案例中作用是保持卷积层的输出和输入大小相同
池化(pooling)
池化是一种形式的降采样,是对信息减少特征,进行抽象的过程。也称为下采样,降采样
作用: 特征不变性,降维以防止过拟合, 增大感受野。
常见池化类型: 平均池化,最大池化
全连接层 (fully connected layer)
全连接层的主要作用是实现分类(classification)
全连接层就是全连接的卷积层
激活函数 (activation function)
激活函数,负责将神经元的输入端映射到输出端。用来加入非线性因素,以表达出神经元的特征
常见激活函数:
Sigmoid函数: $f(z)=\frac {1} {1+e^z}$
特点:把输入的连续实值变换为0和1之间的输出
缺点:反向传递时容易导致梯度消失;函数输出不以0为中心;指数运算复杂度高
Tanh函数: $tanh(x)=\frac {e^x-e^{-x}}{e^x+e^{-x}}$
解决了sigmod的非zero-centered输出问题,但是其余缺点仍未改善$
ReLU函数 (Rectified Linear Unit) : $Relu=max(0,x)$
优点:解决了gradient vanishing问题,计算速度非常快,收敛速度快。 目前最常用
缺点:输出非zero-centered,存在Dead ReLU Problem : ReLU在负数区域被kill,因为x<0时梯度为0.在参数初始化不合适或学习率很大时会出现这种问题。
Leaky ReLU, PReLU, ELU, **MaxOut **等
SoftMax
最常用的多分类损失函数,回头理解了来更新笔记