课时24 深度学习开源库使用介绍(上)

Caffe

被用于重新实现AlexNet,然后用AlexNet的特征来解决其他事情

用C++书写的,可以去GitHub上面读取源代码

主要四个类:

Blob可以存你的权重,像素值,激活等,是n维的张量,就像NumPy一样,他实际上内部有四个n维张量,这个张量有一个数据的版本,用于存储原始未处理的数据。剩下三个分别有diffs,GPU,CPU;

层是一种与你作业中所需要实现的功能相似的功能,会接收输入的Blob,caffe管这些输入的Blob称为底端输入,然后生成。输出的Blob,caffe称其为顶端Blobs。其原理就是,这些层会接收指针指向底端Blobs,这些Blobs中已经有了数据。他们还会收到指向顶端Blobs的指针,他会向前传递,最终会将数据填满在顶端Blobs的数值中。在向回传递时,这些层会实现梯度算法。他们会接收到指向顶端Blobs的指针,Blob中存储了梯度和激活值,他还会接收一个指向底部Blobs的指针,其中已经存满了梯度。问题是:没有一个很好的列表来完整的写出所有层的种类

网的作用就是把许多的层连接在一起。Net其实就是层额有向非循环图,其作用就是按正确的顺序执行层的向前和向后的方法

求解器的功能就是进入Net中,前后地用数据来运行Net,更新网络中的参数,进行检查,并把数据从检查点恢复等一系列的事情。

使用caffe不用书写代码,但要遵循四个步骤:

Torch

必须用lua来写,lua语言是专门为前入睡设备设计的,他运行得非常高效。缺点是处理字符串等这类的工作有时候会显得很笨重,并且数组下标是从1开始。

在torch里,我们并不需要区分层和网络,所有的一切只是一个模型而已,整个神经网络是一个模型,每一层也是一个模型。模型又是用lua定义的类,在实际使用的时候用的是tensor API

linear就是lua的全连接层

顺序容器就是有很多模型,每一个都把前一个的输出作为输入,进入一个线性的堆栈

concat表:你想要对同一个输入执行两个不一样模型,这个表支持你这样做,你会得到一个清单的结果

并行表:如果你有一个清单的输入,你想要对每一个输入都应用不一样的模型,你可以使用并行表

工作流程:

最大的弊端是对RNN无能为力

课时25 深度学习开源库使用介绍(下)

Python是一种解释性语言,这就是为什么他循环效果很差,因为需要进行大量的内存分配和一些其他相关的事情

Theano

他全是关于计算图的,计算图能很好地把复杂的结构整合到一起

为了训练的不同之处在于我们可以计算微分,这里dw1,dw2是损失函数关于w1和w2的梯度,theano可以让你求得图中任一部分关于另一部分的梯度,然后把他们作为新的变量引入计算图中

实现方式叫做共享变量,他是网络中的另一部分,实际上是计算图中存在的值,每一次调用值都不变

也支持多GPU

事实上Keras还会使用Tensorflow作为后端

theano有预训练的模型,Lasagne有一个模型组,有着你可能需要的大量不同模型结构

缺点:对于快速迭代的模型这不是很理想的;他的API比torch要胖一些,必须在后台完成这些复杂的事情;预训练的模型可能没有caffe和torch那么好

TensorFlow

采用了操作图的思想,并在此基础上添加了所有的东西

one-hot(独热):在任务中做的softmax损失函数,y总是一个整数,告诉你所需要是哪个,在一些框架中他不是整数,他是一个向量

优点:将任务分配到多个设备,在TensorFlow中,每个设备的输出都是计算图谱中的一个检查点

缺点:如果你想做一些创新,而且无法用计算图谱实现,则可能会遇到麻烦,但是使用torch的话,则可以做任何创新;没有预训练好的模型

假设我们想要提取AlexNet或者VGG-Net的特征,我们会选择使用Caffe;

如果我们想要对AlexNet进行调优,选择caffe;

如果我们要做调优图片截取,我们需要预训练好的模型还有RNN,则我们可以选择torch或者lasagna;

如果要进行场景分割,我们先要将每个像素点分割开来,首先我们要读取一张输入图片,我们不想要对图片进行标注,而是希望获取独立的每个像素点的标签,需要一个预训练好的模型,所以使用caffe或者torch;

对于物体检测,需要预训练好的模型,还可能要做一些奇特的创新,所以caffe+Python或者torch;

斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时24&&25的更多相关文章

  1. 斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时3

    课时3 计算机视觉历史回顾与介绍下 ImageNet有5000万张图片,全部都是人工清洗过得,标注了超过2万个分类. CS231n将聚焦于视觉识别问题,图像分类关注的是大图整体:物体检测告诉你东西具体 ...

  2. 斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时1

    课时1 计算机视觉历史回顾与介绍上 CS231n:这一一门关于计算机视觉的课程,基于一种专用的模型架构,叫做神经网络(更细一点说,是卷积神经网络CNN).计算机视觉是人工智能领域中发展最为迅猛的一个分 ...

  3. 斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时26&&27

    课时26 图像分割与注意力模型(上) 语义分割:我们有输入图像和固定的几个图像分类,任务是我们想要输入一个图像,然后我们要标记每个像素所属的标签为固定数据类中的一个 使用卷积神经,网络为每个小区块进行 ...

  4. 斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时8&&9

    课时8 反向传播与神经网络初步(上) 反向传播在运算连路中,这是一种通过链式法则来进行递推的计算过程,这个链路中的每一个中间变量都会对最终的损失函数产生影响. 链式法则通常包含两部分,局部梯度和后一层 ...

  5. 斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时12&&13

    课时12 神经网络训练细节part2(上) 训练神经网络是由四步过程组成,你有一个完整的数据集图像和标签,从数据集中取出一小批样本,我们通过网络做前向传播得到损失,告诉我们目前分类效果怎么样.然后我们 ...

  6. 斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时11

    课时11 神经网络训练细节part1(下) 2010年,Glorot等人写的论文,我们称之为Xavier初始化,他们关注了神经元的方差表达式.他们推荐一种初始化方式,那就是对每个神经元的输入进行开根号 ...

  7. 斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时10

    课时10 神经网络训练细节part1(上) 没有大量的数据也不会有太多影响,只需要找一个经过预训练的卷积神经网络然后进行调整 从数据集中抽样一小批数据, 将数据运入卷积神经网络中来计算损失值 通过反向 ...

  8. 斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时7

    课时7 线性分类器损失函数与最优化(下) 我们为什么要最大化对数概率而非直接最大化概率? 你在做逻辑斯蒂回归时,如果你只是想要最大化概率,那你使用log是无意义的.因为log函数是单调函数,最大化概率 ...

  9. 斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时14&&15

    课时14 卷积神经网络详解(上) CNN处理的是一些数据块,在这之间有很多层,一系列的层将输入数据变换为输出数据,所以完成操作的中间量不仅是NN时候讲的那些向量,而是立体结构,有宽,高和深度,在整个计 ...

随机推荐

  1. SSM框架笔记

    配置 Project结构 SpringMVC启用 Spring MVC配置 Spring自己主动扫描 getBean的方法 SpringMVC与Struts2的差别 Log4j 拦截器与过滤器 文件U ...

  2. js中有包装类,java中也有包装类

    new Number() vs Number() What is the difference between new Number() and Number()? I get that new Nu ...

  3. js正則表達式:验证邮箱格式、password复杂度、手机号码、QQ号码

    $(function () { $("input[name='sub']").on("click", function () { if (!isEmail($( ...

  4. SolidEdge如何在零件上写字 如何绘制文字

    在草图状态下,插入-文字轮廓   可以按这两个按钮调节文字的大小和位置   之后你可以通过长出或除料把文字凸起或者凹下去   如果你要制作路径文字(比如环形文字),则先绘制一条圆或一段圆弧,并设为构造 ...

  5. sublime 高速打开跳转至关联文件

    在下一枚web前端,近期在用sublime text2编辑器写前端.因为页面较多,项目较大,所以难免出现非常多引用文件和一些js的teample模板. 问题:在Sublime Text编写代码过程中要 ...

  6. MySQL优化之——触发器

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46763665 触发器是一个特殊的存储过程,不同的是存储过程要用CALL来调用,而触 ...

  7. Hadoop 0.20.2+Ubuntu13.04配置和WordCount測试

    事实上这篇博客写的有些晚了.之前做过一些总结后来学校的事给忘了,这几天想又一次拿来玩玩发现有的东西记不住了.翻博客发现居然没有.好吧,所以赶紧写一份留着自己用吧.这东西网上有非常多,只是也不是全然适用 ...

  8. split+ Pattern切割字符串

    今天在对一个String对象进行拆分的时候,总是无法到达预计的结果.呈现数据的时候出现异常,后来debug之后才发现,错误出在String spilt上,于是开始好好研究下这东西,开始对api里的sp ...

  9. 使用jsoncpp解析生成json

    在此站点下载jsoncpp(https://sourceforge.net/projects/jsoncpp/这个站点的版本较旧) 在电脑上安装Python,运行amalgamate.py,生成的di ...

  10. 自定义表单SQL命令行批量删除垃圾留言

    1.每天被恶意留言困扰,花费大量的时间去清理却效果不理想,对于没有能力做二次开发并且靠纯手工删除留言的菜鸟来讲是一个大麻烦. 2.大家都知道织梦的留言内容是存在数据库里的,而数据库的内容是可以批量删除 ...