Gokula Krishnan Santhanam认为,大部分深度学习框架都包含以下五个核心组件:
- 张量(Tensor)
- 基于张量的各种操作
- 计算图(Computation Graph)
- 自动微分(Automatic Differentiation)工具
- BLAS、cuBLAS、cuDNN等拓展包
.
Gokula Krishnan Santhanam认为,大部分深度学习框架都包含以下五个核心组件:
- 张量(Tensor)
- 基于张量的各种操作
- 计算图(Computation Graph)
- 自动微分(Automatic Differentiation)工具
- BLAS、cuBLAS、cuDNN等拓展包
.
.
.
本节主要参考自文章《开发丨深度学习框架太抽象?其实不外乎这五大核心组件》
.
张量是所有深度学习框架中最核心的组件,因为后续的所有运算和优化算法都是基于张量进行的。几何代数中定义的张量是基于向量和矩阵的推广,通俗一点理解的话,我们可以将标量视为零阶张量,矢量视为一阶张量,那么矩阵就是二阶张量。
举例来说,我们可以将任意一张RGB彩色图片表示成一个三阶张量(三个维度分别是图片的高度、宽度和色彩数据)。如下图所示是一张普通的水果图片,按照RGB三原色表示,其可以拆分为三张红色、绿色和蓝色的灰度图片,如果将这种表示方法用张量的形式写出来,就是图中最下方的那张表格。
图中只显示了前5行、320列的数据,每个方格代表一个像素点,其中的数据[1.0, 1.0, 1.0]即为颜色。假设用[1.0, 0, 0]表示红色,[0, 1.0, 0]表示绿色,[0, 0, 1.0]表示蓝色,那么如图所示,前面5行的数据则全是白色。
将这一定义进行扩展,我们也可以用四阶张量表示一个包含多张图片的数据集,其中的四个维度分别是:图片在数据集中的编号,图片高度、宽度,以及色彩数据。
为什么需要使用张量来进行图片处理??
当数据处理完成后,我们还可以方便地将张量再转换回想要的格式。例如Python NumPy包中numpy.imread和numpy.imsave两个方法,分别用来将图片转换成张量对象(即代码中的Tensor对象),和将张量再转换成图片保存起来。
.
有了张量对象之后,下面一步就是一系列针对这一对象的数学运算和处理过程。
其实,所谓的“学习”就是不断纠正神经网络的实际输出结果和预期结果之间误差的过程。这里的一系列操作包含的范围很宽,可以是简单的矩阵乘法,也可以是卷积、池化和LSTM等稍复杂的运算。
.
有了张量和基于张量的各种操作之后,下一步就是将各种操作整合起来,输出我们需要的结果。
但不幸的是,随着操作种类和数量的增多,有可能引发各种意想不到的问题,包括多个操作之间应该并行还是顺次执行,如何协同各种不同的底层设备,以及如何避免各种类型的冗余操作等等。这些问题有可能拉低整个深度学习网络的运行效率或者引入不必要的Bug,而计算图正是为解决这一问题产生的。
据AI科技评论了解,计算图首次被引入人工智能领域是在2009年的论文《Learning Deep Architectures for AI》。当时的图片如下所示,作者用不同的占位符(*,+,sin)构成操作结点,以字母x、a、b构成变量结点,再以有向线段将这些结点连接起来,组成一个表征运算逻辑关系的清晰明了的“图”型数据结构,这就是最初的计算图。
后来随着技术的不断演进,加上脚本语言和低级语言各自不同的特点(概括地说,脚本语言建模方便但执行缓慢,低级语言则正好相反),因此业界逐渐形成了这样的一种开发框架:前端用Python等脚本语言建模,后端用C++等低级语言执行(这里低级是就应用层而言),以此综合了两者的优点。可以看到,这种开发框架大大降低了传统框架做跨设备计算时的代码耦合度,也避免了每次后端变动都需要修改前端的维护开销。而这里,在前端和后端之间起到关键耦合作用的就是计算图。
需要注意的是,通常情况下开发者不会将用于中间表示得到的计算图直接用于模型构造,因为这样的计算图通常包含了大量的冗余求解目标,也没有提取共享变量,因而通常都会经过依赖性剪枝、符号融合、内存共享等方法对计算图进行优化。
目前,各个框架对于计算图的实现机制和侧重点各不相同。例如Theano和MXNet都是以隐式处理的方式在编译中由表达式向计算图过渡。而Caffe则比较直接,可以创建一个Graph对象,然后以类似Graph.Operator(xxx)的方式显示调用。
因为计算图的引入,开发者得以从宏观上俯瞰整个神经网络的内部结构,就好像编译器可以从整个代码的角度决定如何分配寄存器那样,计算图也可以从宏观上决定代码运行时的GPU内存分配,以及分布式环境中不同底层设备间的相互协作方式。
.
计算图带来的另一个好处是让模型训练阶段的梯度计算变得模块化且更为便捷,也就是自动微分法。
将待处理数据转换为张量,针对张量施加各种需要的操作,通过自动微分对模型展开训练,然后得到输出结果开始测试。那么如何微分中提高效率呢?
第一种方法:模拟传统的编译器
每一种张量操作的实现代码都会预先加入C语言的转换部分,然后由编译器在编译阶段将这些由C语言实现的张量操作综合在一起。目前pyCUDA和Cython等编译器都已经实现了这一功能。
第二种方法:利用脚本语言实现前端建模
用低级语言如C++实现后端运行,这意味着高级语言和低级语言之间的交互都发生在框架内部,因此每次的后端变动都不需要修改前端,也不需要完整编译(只需要通过修改编译参数进行部分编译),因此整体速度也就更快。
第三种方法:现成的扩展包
例如最初用Fortran实现的BLAS(基础线性代数子程序),就是一个非常优秀的基本矩阵(张量)运算库,此外还有英特尔的MKL(Math Kernel Library)等,开发者可以根据个人喜好灵活选择。
一般的BLAS库只是针对普通的CPU场景进行了优化,但目前大部分的深度学习模型都已经开始采用并行GPU的运算模式,因此利用诸如NVIDIA推出的针对GPU优化的cuBLAS和cuDNN等更据针对性的库可能是更好的选择。
.
.
本节内容为小象学院深度学习二期,课程笔记,由寒小阳老师授课,感谢寒小阳老师,讲得深入浅出,适合我这样的菜鸟~
.
用张量tensor表示数据;计算图graph表示任务;在会话session中执行context;
通过变量维护状态;通过feed和fetch可以任意的操作(arbitrary operation)、赋值、获取数据
.
注意:如果tensorflow要输出张量不跟numpy中的array一样,要借助eval()
print(tensor.eval())
.
#创建节点
import tensorflow as tf
matrix1=tr.constant([[3.,3.]]) #常量节点,1*2
matrix2=tr.constant([[2.],[2.]]) #常量节点,2*1
product=tf.matmul(matrix1,matrix2) #矩阵乘法节点,两常量相乘
#执行
sess=tf.Session() #创建session
result=sess.run(product) #run进行执行
print result #返回一个numpy中的ndarray对象
sess.close() #关闭对话,不然占用资源
.
W2=tf.Variable(tf.zeros((2,2)).name="weights")
sess.run(tf.initialize_all_variables())
print(sess.run(W2))
注意需要tf.initialize_all_variables对变量进行初始化才能赋值的。
.
用with…device语句来指派。
.
计算模型
首先构造好整个计算链路,然后进行计算。同时可以对链路进行优化+分布式。
总得来看,链路结构较为复杂,但是比较好计算高效率运算。
layer模型
每个层固定实现前向与后向,同时必须手动指定目标GPU
只要你的服务器上Ubuntu,CUDA+cuDNN安装好了之后,就可以直接一步到位,快到飞起。
一步到位,配好
https://mirrors.tuna.tsinghua.edu.cn/help/tensorflow/
.
摘录自知乎专栏:TensorFlow-dev-summit:那些TensorFlow上好玩的和黑科技
1、TensorFlow 1.0在分布式训练inception-v3模型上,64张GPU可以达到58X的加速比,更灵活的高层抽象接口,以及更稳定的API。
2、XLA: An Experimental TensorFlow Compiler,快速地将TensorFlow转成比较底层的实现(依赖device),这里后面有个talk,详细讲述了XLA。
3、有趣的应用案例,皮肤癌图像分类,pretrained的inception-v3对数据来做finetuning,最后在手机上做inference
4、Keras与TensorFlow的集成。
Keras的用户可以更快的在TensorFlow的框架下做出相应地模型,能更方便地进行分布式训练,使用Google的Cloud ML, 进行超参,还有更更重要的:TF-Serving
5、分布式TensorFlow
1.0版本上有了很大的提升可以做到64块GPU上达到58倍的加速,这里先基本介绍下数据并行和模型并行
.
https://github.com/tensorflow/tensorflow
https://github.com/fchollet/keras
https://github.com/tflearn/tflearn
https://github.com/beniz/deepdetect
https://github.com/tensorflow/fold
https://github.com/leriomaggio/deep-learning-keras-tensorflow
https://github.com/tensorflow/models
https://github.com/aymericdamien/TensorFlow-Examples
https://github.com/donnemartin/data-science-ipython-notebooks
https://github.com/jtoy/awesome-tensorflow
https://github.com/jikexueyuanwiki/tensorflow-zh
https://github.com/nlintz/TensorFlow-Tutorials
https://github.com/pkmital/tensorflow_tutorials
https://github.com/deepmind/learning-to-learn
https://github.com/BinRoot/TensorFlow-Book
https://github.com/jostmey/NakedTensor
https://github.com/alrojo/tensorflow-tutorial
https://github.com/CreatCodeBuild/TensorFlow-and-DeepLearning-Tutorial
https://github.com/sjchoi86/Tensorflow-101
https://github.com/chiphuyen/tf-stanford-tutorials
https://github.com/google/prettytensor
https://github.com/ahangchen/GDLnotes
https://github.com/Hvass-Labs/TensorFlow-Tutorials
https://github.com/NickShahML/tensorflow_with_latest_papers
https://github.com/nfmcclure/tensorflow_cookbook
https://github.com/ppwwyyxx/tensorpack
https://github.com/rasbt/deep-learning-book
https://github.com/pkmital/CADL
https://github.com/tensorflow/skflow
https://github.com/kevinhughes27/TensorKart
https://github.com/SullyChen/Autopilot-TensorFlow
https://github.com/dennybritz/reinforcement-learning
https://github.com/zsdonghao/tensorlayer
https://github.com/matthiasplappert/keras-rl
https://github.com/nivwusquorum/tensorflow-deepq
https://github.com/devsisters/DQN-tensorflow
https://github.com/coreylynch/async-rl
https://github.com/carpedm20/deep-rl-tensorflow
https://github.com/yandexdataschool/Practical_RL
文本分类
https://github.com/dennybritz/cnn-text-classification-tf
序列建模
https://github.com/google/seq2seq
中文分词
https://github.com/koth/kcws
基于文本的图像合成
https://github.com/paarthneekhara/text-to-image
RNN语言建模
https://github.com/sherjilozair/char-rnn-tensorflow
https://github.com/silicon-valley-data-science/RNN-Tutorial
神经图灵机
https://github.com/carpedm20/NTM-tensorflow
语音合成
https://github.com/ibab/tensorflow-wavenet
https://github.com/tomlepaine/fast-wavenet
语音识别
https://github.com/buriburisuri/speech-to-text-wavenet
https://github.com/pannous/tensorflow-speech-recognition
风格转换
https://github.com/anishathalye/neural-style
https://github.com/cysmith/neural-style-tf
运用GAN图像生成
https://github.com/carpedm20/DCGAN-tensorflow
图像到图像的翻译
https://github.com/affinelayer/pix2pix-tensorflow
图像超分辨
https://github.com/Tetrachrome/subpixel
人脸识别
https://github.com/davidsandberg/facenet
目标检测
https://github.com/TensorBox/TensorBox
运动识别
https://github.com/guillaume-chevalier/LSTM-Human-Activity-Recognition
图像复原
https://github.com/bamos/dcgan-completion.tensorflow
生成模型
https://github.com/wiseodd/generative-models
https://github.com/ericjang/tdb
https://github.com/samjabrahams/tensorflow-on-raspberry-pi
https://github.com/rstudio/tensorflow
https://github.com/fluxcapacitor/pipeline
https://github.com/yahoo/TensorFlowOnSpark
https://github.com/ethereon/caffe-tensorflow
https://github.com/blei-lab/edward
win10环境下通过anaconda安装Python3.6+TensorFlow配置
自己通过网上查询的有关张量的解释,稍作整理。 TensorFlow用张量这种数据结构来表示所有的数据.你可以把一个张量想象成一个n维的数组或列表.一个张量有一个静态类型和动态类型的维数.张量...
https://github.com/google/prettytensor https://github.com/ahangchen/GDLnotes https://github.com/Hvass-Labs/TensorFlow-Tutorials https://github....
2018-6-17
代码: https://github.com/aymericdamien/TensorFlow-Examples/blob/master/... https://github.com/tflearn/tflearn/blob/master/tutorials/intro/quickstart...
2018-6-6
在Tensorflow中,所有数据都通过张量的形式来表示,从功能上看,张量可以简单的被理解为多维数组。其中零阶张量表示标量(scalar),也就是一个数;第一阶张量为向量(vector),也就是一个一...
//github.com/tensorflow/models/blob/master/tutorials/image/cifar10/cifar10_multi_gpu_train.py # tensorflow_models\tutorials\image\cifar10\cifar10_multi_...
2018-7-4
Tutorials / Talks Projects Tools Blogs MethodVOC... github: https://github.com/zplizzi/tensorflow-...
2018-7-5
参考: http://jorditorres.org/research-teaching/tensorflow/first-contact-with-tensorflow-book/first-con...
在Tensorflow中所有的数据都是通过张量的形式来表示。从功能上看,张量可以被理解为一个多维数组。但张量在Tensorflow中的实现并是不直接采用数组的形式,它是对Tensorflow中运算结果...
2. 如果你下载了Github(https://github.com/tensorflow/tensorflow/blob/r0.12/tensorflow/examples/tutorials/mnist/mnist_softmax.py)中的数据可以直接使用...
2018-7-2
https://github.com/martin-gorner/tensorflow-mnist-tutorial/blob/master/mnist_1.0_softmax.py...
2018-6-15
Gokula Krishnan Santhanam认为,大部分深度学习框架都包含以下五个核心组件: 张量(Tensor)基于张量的各种操作计算图(Computation Graph)自动微分(A...
转载自:http://www.tensorfly.cn/tfdoc/tutorials/mnist_tf.html 教程使用的... 全文参考地址: https://github.com/jikexueyuanwiki/tensorflow-zh/blob/130a...
2018-7-5
from tensorflow.examples.tutorials.mnist import input_data import tensor... 参照conv2d的注释[conv2d](https://github.com/tensorflow/tensorflow/blob...
2018-7-5
从TensorFlow的名字就可以看出张量(tensor)是一个很重的概念。在tensorflow程序中所有的数据都通过张量的形式来表示。从功能的角度看,张量可以被理解为多维数组。其中零阶张量表示标量...
```python # 2-D tensor `a` a = tf.constant([1, 2, 3, 4, 5, 6], shape=[2, 3]) => [[1. 2. 3.] ...
笔记:https://github.com/aymericdamien/TensorFlow-Examples/blob/master/... 笔记:https://github.com/tflearn/tflearn/blob/master/tutorials/intro/quick...
2018-6-5
以下内容转载至:http://blog.csdn.net/pandamax/article/details/63684633 自己通过网上查询的有关张量的解释,稍作整理。 ...
张量的使用张量的使用可以总结为两大类。 第一类用途是对中间计算结果的引用。当一个计算包含很多计算结果时,使用张量可以很大的提高代码可读性。一下为使用张量和不使用张量记录中间结果来完成向量相加的代码对...
TensorFlow,以下简称TF,是Google去年发布的机器学习平台,发布以后由于其速度快,扩展性好,推广速度还是蛮快的。江湖上流传着Google的大战略,Android占领了移动端,TF占领神经...
本篇文章将为大家总结TensorFlow纯干货学习资源,非常适合新手学习,建议大家收藏。▌一 、TensorFlow教程资源1)适合初学者的TensorFlow教程和代码示例:https://gith...
且看知乎上的帖子:如何高效的学习tensorflow? 本篇简要总结以下,并不断更新中~~ tensorflow官网(需要)一个有用的链接学习TensorFlow 极客学院的MNIST入门gi...
转载请注明作者和出处: https://blog.csdn.net/weixin_37392582 开发平台: Win10 + Python3.6 + Anaconda3 编 者: 无尾 ...
Tensorflow学习笔记 参考 知乎 莫烦 Tensorflow 安装 # python 2+ 的用户: $ pip install tensorflow # python ...
转载于深度学习每日摘要,ConvLSTM原理及其TensorFlow实现 本文参考文献 Convolutional LSTM Network: A Machine Learning Approa...
本文将介绍U-net模型,以及其tensorflow的实现,保存在Github上 U-net 结构 U-net顾名思义,其结构是一个U型的网络 左侧为一个下采样过程,分4组卷积操作(蓝色...
tensorflow入门介绍http://blog.jobbole.com/105602/tensorflow时间序列预测(TFTS)http://blog.csdn.net/wemedia/deta...
TensorFlow 是非常强大的分布式跨平台深度学习框架,但对于初学者来说,构建复杂的项目代码是一个不小的挑战。因此本文整理了一些深度学习项目的Tensorflow实现资源,以方便初学者参考学习。对...
Github上除了有TensorFlow的源码库之外,还有一些很不错的适合入门的资源。现在将目前已经解除到的资源整理出来,和大家分享。1、TensorFlow源码库https://github.com...
转载自:https://sanwen8.cn/p/63flBuU.html TensorFlow从入门到实战资料汇总 2017-02-02 06:08 | 数据派 ...
Prisma这个应用,你可能很熟悉。这是一个能将不同的绘画风格,迁移到照片中,形成不同艺术风格的图片。 今年4月,美国康奈尔大学和Adobe的一个研究团队Fujun Luan和Sylvain P...
c2a2o2
2017-08-17 16:01:31
阅读数:981
对于深度学习工作者而言,大量的开源项目避免了很多重造轮子的工作,降低了算法实现门槛。本文盘点了在Github上获得Stars最多的深度学习项目,供从业者参考。并感谢这些开源爱好者的贡献。 ...
happytofly
2016-08-12 12:18:34
阅读数:723
前言 实际工程中很少有直接用深度学习实现端对端的聊天机器人,但这里我们来看看怎么用深度学习的seq2seq模型来实现一个简易的聊天机器人。这篇文章将尝试使用TensorFlow来训练一个基于se...
kwame211
2017-10-10 11:53:57
阅读数:288
PC上装好Ubuntu系统,我们一步一步来讲解如何使用源码安装tensorflow?(我的Ubuntu系统是15.10) 根据你的系统型号选择相应的cuda版本下载 https://deve...
转载网址:http://note.youdao.com/share/?id=71216576910b7a6cd6f2a0f2ebf8faa2&type=note#/ —— 感谢AI研习社...
[转] http://www.leiphone.com/news/201703/JNPkCt08zJd9znzZ.html 自 2015 年 11 月首次发布以来,TensorFlo...
这是使用 TensorFlow 实现流行的机器学习算法的教程汇集。本汇集的目标是让读者可以轻松通过案例深入 TensorFlow。 这些案例适合那些想要清晰简明的 TensorFlow 实现案例...
自 2015 年 11 月首次发布以来,TensorFlow 凭借谷歌的强力支持,快速的更新和迭代,齐全的文档和教程,以及上手快且简单易用等诸多的优点,已经在图像识别、语音识别、自然语言处理、数据挖掘...
近几年,信息时代的快速发展产生了海量数据,诞生了无数前沿的大数据技术与应用。在当今大数据时代的产业界,商业决策日益基于数据的分析作出。当数据膨胀到一定规模时,基于机器学习对海量复杂数据的分析更能产生较...
作者:肖仰华,复旦大学计算机科学技术学院,副教授,博士生导师,上海市互联网大数据工程技术中心副主任。主要研究方向为大数据管理与挖掘、知识库等。 大数据时代的到来,为人工智能的飞速发展带来前所未有...
AI这个概念好像突然就火起来了,大比分战胜李世石的AlphaGo成功的吸引了大量的关注,但其实看看你的手机上的语音助手,相机上的人脸识别,今日头条上帮你自动筛选出来的新闻,还有各大音乐软件的歌曲“每日...
介绍TensorFlow™ 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。TensorFlow 最初由Google大脑小组(隶属于Google机器智能研究机构)的研...
这是比较重要的一节,或者说,是比较难搞懂的一个部分,说实在,我也不知道自己有没有搞清楚,先尝试着写一下,看看能不能写清楚。可同时参考菜鸟学院tensorflow 翻译教程的共享变量部分 tensor...
一 概要 CIFAR-10分类问题是机器学习领域的一个通用基准,其问题是将32X32像素的RGB图像分类成10种类别:飞机,手机,鸟,猫,鹿,狗,青蛙,马,船和卡车。 更多信息请移步CIFA...
1 计算图在TensorFlow中,算法都被表示成计算图(computational graphs)。计算图也叫数据流图,可以把计算图看做是一种有向图,图中的节点表示操作,图中的边代表在不同操作之间的...
Tensorflow object detection API是基于tensorflow的开源框架,可以用于搭建、训练、使用object detection服务。 github传送门 object...
本文主要介绍了Gradient Computation、Processing gradients before applying them、tf.assign、关于tf.gradients()函数的详...
大数据文摘作品,转载要求见文末编译 | 邵胖胖,江凡,笪洁琼,Aileen也许你已经下载了TensorFlow,而且准备开始着手研究深度学习。但是你会疑惑:TensorFlow里面的Tensor,也就...
1 张量和图 TensorFlow是一种采用数据流图(data flow graphs),用于数值计算的开源软件库。其中 Tensor 代表传递的数据为张量(多维数组),Flow 代表使用计算图进行...
Tensor数据相关的运算及函数讲解 Tensor tensorflow 中使用它来表示数据。可以看做多维数组或者list。 标量是张量,向量是张量,矩阵是张量,矩阵的矩阵是张量 常用几...
突然发现tensorflow的tf.matmul()只能进行矩阵之间相乘,不能进行矩阵和向量相乘!例如:Ws = tf.get_variable('Ws', [hidden_size]) bias_s...
hejunqing14
2017-05-12 22:25:20
阅读数:12755
从TensorFlow的名字就可以看出张量(tensor)是一个很重的概念。在tensorflow程序中所有的数据都通过张量的形式来表示。从功能的角度看,张量可以被理解为多维数组。其中零阶张量表示标量...
引言:人类的未来就是失控,就是人与机器共生、共存。机器越来越人性化, 人越来越机器化。《失控》这本书,主要就体现了这一思想。 本文选自《全栈数据之门》一书。 琅琊榜首,江左梅郎,得之可...
核心定义: tf.train.Saver类保存 三个文件:模型文件列表checkpoint,计算图结构model.ckpt.meta,每个变量的取值model.ckpt 通过tf.train.impo...
前言 断断续续花了几周的时间,终于把Tensorflow的学习教程Convolutional Neural Networks实现了。因为是深度学习的入门级小白,所以中间费了不少周折。 网上关...
张量是N维矩阵抽象。一维张量是向量。二维张量是矩阵,三维或以上称N维张量或N阶张量。输入节点,从接收标量,改为接收向量。.reduce_prod()创建归约乘积Op。reduce_sum()创建归约求...