课时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. python远程访问hive

    #!/usr/bin/pythonimport syssys.path.append('/home/zhoujie/Downloads/hive-0.7.0-cdh3u0/lib/py')from h ...

  2. Deep learning网络调参技巧

    参数初始化 下面几种方式,随便选一个,结果基本都差不多.但是一定要做.否则可能会减慢收敛速度,影响收敛结果,甚至造成Nan等一系列问题.n_in为网络的输入大小,n_out为网络的输出大小,n为n_i ...

  3. HDU 1501

    Zipper Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  4. SolidEdge 工程图中如何快速将同一类元素放到同一个图层

    在图层选项卡中新建一个尺寸线图层   点击聪慧选项(把它点凹下去),然后点击任意尺寸线,弹出聪慧选取选项,点击确定,则自动选择了所有尺寸线   点击移动图元,把刚才选中的所有尺寸线都移动到这个图层即可 ...

  5. gulp - sass 插件一直安装不好?

    1.没有sass,只存在与scss 任务 gulp.task('scss', function() { return gulp.src(app.srcPath + '/sass/*.scss') .p ...

  6. Qt在线技术交流之OpenGL、Quick以及所经历项目开发心得分享

    时间:3月25日晚上7:30 主题:Qt在线技术交流之OpenGL.Quick以及所经历项目开发心得分享 直播:http://qtdream.com 主页.全民TV,可能会加上其他的直播平台进行转播 ...

  7. Android-studio 连接真机 调试weex项目

    1.选择项目 platforms  /  android 2.创建虚拟机(AVD) (1)点击 AVD Manager (2) 点击  Create Virtual Device 最后发现 CPU 不 ...

  8. 将世界坐标转成NGUI坐标

    将世界坐标转成NGUI坐标,这个中间须要一个屏幕坐标,可參考例如以下代码: /// <summary> /// 将世界坐标转成UI坐标 /// </summary> /// & ...

  9. 封装算法: 模板方法(Template Method)模式

    template method(模板方法)模式是一种行为型设计模式.它在一个方法中定义了算法的骨架(这种方法被称为template method.模板方法),并将算法的详细步骤放到子类中去实现.tem ...

  10. Yii框架中安装srbac扩展方法

    首先,下载srbac_1.3beta.zip文件和对应的blog-srbac_1.2_r228.zip 问什么要下载第二个文件,后面就知道了. 按照手册进行配置: 解压缩srbac_1.3beta.z ...