深度学习--caffe(1)

深度学习–caffe试水

深度学习是机器学习研究中的一个新领域,动机是什么?
模拟人脑进行分析学习
目前有很多的深度学习框架,我就先试一试caffe的水,看看水到底有多深。。。
自2006年Hinton和他的学生在science上发表了一篇开启深度学习研究的文章—《Reducing the Dimensionality of Data with Neural Networks》,深度学习火得一发不可收拾。。。
深度学习算法采用大量的卷积层,利用空间相对关系来减少参数数目以提高训练性能
从生物意义上的神经网络模型到人工神经网络模型,bp神经网络,卷积神经网络再到深度学习网络的主流框架是如何一步一步发展的呢

生物意义上的神经网络模型

视觉系统的信息处理,可视皮层是分级的,关键词:抽象和迭代
从原始信号,做低级抽象,逐渐向高级抽象迭代

人工神经网络

1.人工神经元模型
三要素:
一组连接
一个求和单元
一个非线性**函数
2.BP神经网络
正向传播:
输入层到隐层(k=1,2,...,p)
zk=f1(ni=0vkixi)
隐层到输出层(j=1,2,...,m)
yj=f2(pk=0wjkzk)
f1f2是单调上升函数,而且必须是有界函数,因为细胞传递的信号不能是无线增加的,必须有最大值!!!
根据上述公式完成了n维空间向量对m维空间的近似映射(在我理解是对原始数据做了非线性映射,投影到新的空间上)
反向传播:
首先以何种标准进行反向调整网络呢?
我们需要定义误差函数来约束我们的网络,也就是我们的网络想要得到的东西是什么呢?
我们可以使用平方误差也可以根据我们具体的任务来定义损失函数
在这里我们以平方误差为例:
v个样本的误差Ev:
Ev=12mj=1(tvjyvj)2
其中,tvj是我们所期望的输出
对于P个样本,全局误差为
E=12Pv=1mj=1(tvjyvj)2=Pv=1Ev)
3.卷积神经网络
卷积神经网络的权重共享网络结构是卷积神经网络的特色
可以对平移、比例缩放、倾斜或者是共他形式的变形具有高度不变性!!!
话不多说,直接来感受一下经典的网络模型

<一>LeNet网络

我们从LeNet网络模型开始,lenet-5包含输入层在内总共八层,每一层都包含多个参数(权重)
input->convolutions->subsampling->convolutions->subsampling->full connection->full connection->gaussian connections
第一层:输入层,图像大小为32*32
第二层:卷积层,6个feature map,5*5大小的卷积核,每个feature map为(32-5+1)*(32-5+1),即6*28*28
通过卷积运算,使原始信号特征增强,并且降低噪音,不同的卷积核能够提取到不同的特征
第三层:下采样层,2*2的下采样,总共有6*14*14个feature map
下采样层的池化方式通常有两种:一种是选择pooling窗口中的最大值作为采样值,即最大值池化;二是将pooling窗口中的所有值相加取平均值作为采样值,即均值池化
第四层:卷积层,总共16个feature map,分别是上一层的6个feature map的组合
第五层:有一个下采样层,下采样层的目的是为了降低网络训练参数以及模型的过拟合程度
第六层:有一个卷积层,总共120个feature map,每个map都是上一层16个feature map的组合
第七层:全连接层,正切函数
xi=f(ai)=Atanh(sai)
第八层:输出层也是全连接层,一共10个节点,分别代表数字0-9,
yi=j(xjwij)2
我们在mnist数据集上对该模型进行了学习
下面是训练过程:
首先是准备训练、测试数据
执行./data/mnist/get_mnist.sh
该脚本会从网址上下载样本库并进行解压缩
之后将下载的数据集转化成caffe能够处理的数据格式lmdb
执行./examples/mnist/create_minist.sh
生成模型所需的数据之后就是训练模型了
LeNet的网络定义在lenet_train_test.prototxt文件中
训练网络,我们需要运行./examples/mnist/train_lenet.sh
该脚本执行的内容其实是:
./build/tools/caffe train –solver=examples/mnist/lenet_solver.prototxt
solver.prototxt是参数配置文件
训练开始:
深度学习--caffe(1)
训练完成:
深度学习--caffe(1)
测试:
执行example里自带的test
./build/tools/caffe.bin test -model=examples/mnist/lenet_train_test.prototxt -weights=examples/mnist/lenet_iter_10000.caffemodel
深度学习--caffe(1)
打印出loss和accuracy曲线:
由于我是在服务器上跑的,没有图形界面,所以无法plot图,后续我在自己的电脑上画一个吧
不过方法的话 是可行的 小伙伴已经亲测过了
我们想要打印训练日志的话,可以使用caffe自带的log脚本,在train.sh里将保存log的脚本加入,
深度学习--caffe(1)
这样便可以生成log日志,使用caffe中自带的tools/extra/parse_log.sh以及plot_traing_log.py.example来plot各种loss和accuracy曲线

ok!先到这里吧,后续再更新。。。