0 引言

Marvin是普林斯顿视觉实验室(PrincetonVision)于2015年提出的轻量化GPU加速的多维深度学习网络框架。该框架采用纯c/c++编写,除了cuda和cudnn以外,不依赖其他库,编译非常简单,功能也相当强大,用于深度神经网络的快速原型开发非常好用。缺点在于没有提供API,所有的代码集中在marvin.hpp一个文件中,读起来非常困难。好在提供了视频格式的PPT,对框架和代码进行解读。下面将基于官网视频/ppt对该框架进行介绍。

1 相关链接

不想看我翻译的同学可以直接参考下面的链接,里边包含了我下面将要讲到的所有知识。

官网:                         http://marvin.is/
github: https://github.com/PrincetonVision/marvin
基于Marvin搭建的应用3DMatch: https://github.com/andyzeng/3dmatch-toolbox

2 为什么要用Marvin

深度学习的框架千千万,包括caffe,tensorflow,keras,pytorch等,为啥一定要试试Marvin呢?用过caffe的同学知道,caffe的配置分分钟让一个正常的少男少女抓狂;tensorflow则包含两个版本,而且不向下兼容,跑前一个版本的代码颇为费劲,还要去改源码;keras集成了tensorflow等框架,封装严密,这种框架上手一时爽,但出了bug调试起来就很难找到原因。其他的不一一分析了。相比而言,Marvin有一下几个优点。

(1)依赖项极少,就俩,CUDA 7.5 and cuDNN 5.1

(2)编译方便,./compile.sh就完事了

(3)模型框架描述清晰,模型采用.json文件描述,类似于caffe的.prototxt文件,搭建或者修改起来都极为方便

(4)运行速度快,在GPU计算方面进行了优化,可显著节省显存

(5)支持多种型号的GPU

(6)跨平台,支持Windows,Mac,Linux等

3 模型的训练过程介绍

(1)可以用下面这个公式简单解释一下,即训练的目的是通过迭代法不断调整权重(weights)参数使损失函数(loss)收敛/最小化

                           

(2)训练的基本原理是利用梯度下降法(gradient descent),不断更新权重参数, 通常采用直接梯度下降法随机梯度下降法来训练

                           

(3)训练的迭代步骤如下

  1 随机采样小样本批次

  2 前向传播 (forward) 计算响应

  3 反向传播 (backpropagation) 计算权重和响应梯度

  4 用梯度更新权重

(4)训练参数

  1 learning rate

  2 weight decay

  3 momentum

(5)正则化(regularization)与求解器(solver)可选

4 Marvin工程文件介绍

(1)源文件: marvin.hpp和 marvin.cu

(2)可执行文件:./marvin

(3)matlab脚本,python脚本等

(4).tensor后缀的文件是数据输入输出文件(估计是中间文件之类的)

(5).marvin是模型的权重参数文件,即训练的结果

(6).json文件是网络结构描述文件,marvin.hpp文件中存在类JSON可以对.json文件进行解析

5 数据格式操作及转换

(1)tensor file format

(2)张量数据类型转换: matlab与python工具箱中提供了相应的方法

6 JSON网络架构

(1)JSON文件格式介绍: http://www.json.org/

(2)在线查看器:http://jsonviewer.stack.hu  等

(3)网络可视化工具: tools/viewer_matlab

(4)层之间应当遵循拓扑顺序; 层的名称具有唯一性; 测试与训练的mini-batch size应当一致

7 layer介绍

(1)卷积层convolution

(2)内积层InnerProduct

(3)激活层activation

(4)LRN层

(5)Dropout层

(6)softmax层

(7)loss层

(8)池化pooling层

8 数据层: class DataLayer及其子类

(1)为了重用training 和 testing的显存,需要将training 和 testing的mini-batch size 设置成一样的

(2)DataLayer中的超参数的意义

  1 numofitems: 如果你在训练集中有64000张图片,那么  numofitems == 64000

  2 mini-batch size:深度学习每一次参数的更新所需要损失函数并不是由一个 {data: label} 获得的,而是由一组数据加权得到的,这一组数据的数量就是 [batch size]

https://blog.csdn.net/xys430381_1/article/details/80680167  # 关于使用batch size的利弊分析

  3 epoch: 当我们分批学习时,每次使用过全部训练数据(全部子集)完成一次Forword运算以及一次BP运算,成为完成了一次epoch

  4 iterations: 迭代。比如,我们有1000个样本,batch size是50,其将会有20个Iterations。这20个Iteration完成一个epoch

(3)MemoryData: 将所有数据&标签全部加载到cpu内存中,每次前向运算使用RAM中的部分数据和标签

  1 name

  2 phase: "Training", "Testing", "TrainingTesting"

  3 file_data: path to a tensor file for data    # 训练数据的路径信息

  4 file_lable: path to a tensor file for lable   # 训练标签的路径信息

  5 file_mean: path to a tensor file for the mean for subtraction, default empty "" to disable sutraction   # 一个张量文件的路径,用于求减法的平均值

  6 batch_size: 64, scale: 1.0, mean: 0.0

(4)DiskData: 将所有的数据&标签加载到CPU内存中,将所有数据放在开放文件夹里,每次前向运算,从CPU RAM中读入一部分标签, 移动硬盘指针将文件读取并传入GPU

当数据量比较大的时候用,但是不适用于CPU RAM, 比如ImageNet

  1 name: datalayer name

  2 phase: "Training", "Testing", "TrainingTesting"

  3 in: the mean used to subtract typically provide form the out of tensor constant data layer       # 用于相减的平均值,通常由张量常数数据层提供

  4 out: the first is the data, the second is the label

  5 file_data: path to a tensor file for data    # 训练数据的路径信息

  6 file_label: path to a tensor file for lable   # 训练标签的路径信息

  7 batch_size: 64

  8 mirror: true/false, horizontally flip the image randomly   # 是否随机水平翻转图像

  9 size_crop: if the size_crop is smaller than the size of items in file _data, Marvin will randomly crop

9 PPT版Marvin介绍下载链接

https://github.com/2017Greg/myVscodeProject

56 Marvin: 一个支持GPU加速、且不依赖其他库(除cuda和cudnn)的轻量化多维深度学习(deep learning)框架介绍的更多相关文章

  1. Windows 10下安装配置Caffe并支持GPU加速(修改版)

    基本环境 建议严格按照版本来 - Windows 10 - Visual Studio 2013 - Matlab R2016b - Anaconda - CUDA 8.0.44 - cuDNN v4 ...

  2. 想要使用GPU进行加速?那你必须事先了解CUDA和cuDNN

    这一期我们来介绍如何在Windows上安装CUDA,使得对图像数据处理的速度大大加快,在正式的下载与安装之前,首先一起学习一下预导知识,让大家知道为什么使用GPU可以加速对图像的处理和计算,以及自己的 ...

  3. gohook 一个支持运行时替换 golang 函数的库实现

    运行时替换函数对 golang 这类静态语言来说并不是件容易的事情,语言层面的不支持导致只能从机器码层面做些奇怪 hack,往往艰难,但如能成功,那挣脱牢笼带来的成就感,想想就让人兴奋. gohook ...

  4. 一个采用python获取股票数据的开源库,相当全,及一些量化投资策略库

    tushare: http://tushare.waditu.com/index.html 为什么是Python? 就跟javascript在web领域无可撼动的地位一样,Python也已经在金融量化 ...

  5. 深度学习“引擎”之争:GPU加速还是专属神经网络芯片?

    深度学习“引擎”之争:GPU加速还是专属神经网络芯片? 深度学习(Deep Learning)在这两年风靡全球,大数据和高性能计算平台的推动作用功不可没,可谓深度学习的“燃料”和“引擎”,GPU则是引 ...

  6. tensor搭建--windows 10 64bit下安装Tensorflow+Keras+VS2015+CUDA8.0 GPU加速

    windows 10 64bit下安装Tensorflow+Keras+VS2015+CUDA8.0 GPU加速 原文见于:http://www.jianshu.com/p/c245d46d43f0 ...

  7. supervessel-免费云镜像︱GPU加速的Caffe深度学习开发环境

    开发环境介绍 在SuperVessel云上,我们为大家免费提供当前火热的caffe深度学习开发环境.SuperVessel的Caffe有如下优点: 1) 免去了繁琐的Caffe环境的安装配置,即申请即 ...

  8. 关于Haclon使用GPU加速的代码实例

    关于Haclon使用GPU加速的代码实例 read_image(Image, 'T20170902014819_58_2_1.bmp') *没有加加速并行处理 count_seconds(T1) to ...

  9. windows 10 64bit下安装Tensorflow+Keras+VS2015+CUDA8.0 GPU加速

    原文地址:http://www.jianshu.com/p/c245d46d43f0 写在前面的话 2016年11月29日,Google Brain 工程师团队宣布在 TensorFlow 0.12 ...

随机推荐

  1. Go基础之基本数据类型

    Go基础之基本数据类型 基本数据类型 整形 int8.int16.int32.int64 无符号整形:uint8.uint16.uint32.uint64 uint8就是我们熟知的byte型 类型 描 ...

  2. 使用raise语句抛出异常

    #_author:来童星#date:2019/12/18def division(): num1=int(input('请输入被除数:')) num2=int(input('请输入除数:')) if ...

  3. OpenSearch最新功能介绍

    摘要:阿里云开放搜索(OpenSearch)是一款结构化数据搜索托管服务,其能够提供简单.高效.稳定.低成本和可扩展的搜索解决方案.OpenSearch以平台服务化的形式,将专业搜索技术简单化.低门槛 ...

  4. Shell基础(六):使用awk提取文本、awk处理条件、awk综合脚本应用、awk流程控制、awk扩展应用

    一.使用awk提取文本 目标: 本案例要求使用awk工具完成下列过滤任务: 1> 练习awk工具的基本用法    2> 提取本机的IP地址.根分区使用率    3> 格式化输出/et ...

  5. 管理员技术(二): 访问练习用虚拟机、 命令行基础技巧 、 挂载并访问光盘设备、ls列表及文档创建、复制删除移动

    一.访问练习用虚拟机 目标: 学会在教学环境中访问练习用虚拟机,主要完成以下事项: 1> 快速重置教学虚拟机环境       2> 通过“虚拟系统管理器”访问虚拟机       3> ...

  6. python内置模块-random

    print(random.randint(1,10)) 生成随机整数,下限必须小于上限print(random.randrange(1,10)) 生成随机整数,参数为([start],stop,[st ...

  7. 杂项:SVN -u

    ylbtech-杂项:SVN 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   7.返回顶部   8.返回顶部   9.返回顶部   10 ...

  8. 简单谈谈Python中的几种常见的数据类型

    简单谈谈Python中的几种常见的数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等 ...

  9. vue 笔记,ref 及 $event 事件对象

    本文仅用作简单记录 ref : 在标签上添加 ref = “name” ,表示获取当前元素节点 <input type="text" ref="info" ...

  10. webdriver使用已打开过的chrome

    基本功能: 执行脚本a,打开一个chrome,脚本a执行完成,chrome未关闭. 执行脚本b,继续使用a打开的chrome,不新启浏览器. 附加: 如果已打开的chrome未关闭,则在chrome中 ...