什么是Tensor Flow和lite以及数据流图

TensorFlow:谷歌的深度学习框架解析
TensorFlow是谷歌GoogleBrain实验室开发的深度学习框架,始于2015年,支持多平台运行,包括TensorFlowLite针对移动设备。其核心是数据流图,通过构建节点和边来表示计算过程。TensorFlow内置多种深度学习模型,如Keras,并在AlphaGo项目中发挥了关键作用。框架支持CPU和GPU运算,依赖CUDA进行GPU加速。
部署运行你感兴趣的模型镜像

目录

概述

发展历史

数据流图

基本架构


概述

Tensor Flow是谷歌Google Brain实验室维护开发的,它于2015年11月9日发布第一个初始版本,遵循Apache 2.0开源协议,经过变迁第一个稳定版本是1.12.0在2018年10月9日发布,它支持跨平台能够在WIn、Linux、Unix上稳定运行。Tensor Flow Lite是Tensor Flow的一个分支,它基于Tensor Flow,它的目标是在移动设备、最小单片机设备上运行,所以它被设计的非常简洁,它也被简称为tflite,除了Tensor Flow Lite以外还有TensorFlow Hub、TensorFlow Research Cloud,这些分支都是针对不同的环境研发的。

Tensor Flow强大的地方在于它内置了许多深度学习算法框架模型,比如keras,目前Keras作者已经加入谷歌了,所以Keras目前可以说是谷歌官方API,若我们直接去使用这些开源框框架的话对初学者不是那么友好,使用起来较为复杂,但经过Tensor Flow的一层封装后使得模型统一使用流程图的方式,变得简单了许多,并且它也提供了许多推荐参数,所以大多数的参数我们是不需要自己去设置的。

AlphaGo就是基于Tensor Flow训练的

发展历史

Tensor Flow是谷歌旗下的Google Brain实验室开发的,Google Brain是谷歌旗下专门研发AI算法与框架的实验室,它是由Python、C++、C三款语言开发而成,它目前对Python支持API最全面,最完善,对C++的API接口支持并没有Python完善,同时它也支持Java不过目前仅是实验版本,支持的API接口非常有限。

Google Brain于2015年11月9号发布第一个Bate版本,历经3年左右时间迭代研发在2018年10月9日推出了第一个完整AI生态链的AI框架:1.12.0,Tensor Flow支持CPU与GPU运算,甚至支持可以选用多少核来做训练运算,对GPU的运算使用了CUDA框架,CUDA是NVIDIA(英伟达)开发的一套用于在NVIDIA显卡上进行并行运算的架构,GPU的运算效率要高于CPU,因为它不需要像CPU那样去处理大量的指令集,它只需要去处理运算数据就可以了,因为它的工作仅仅是显示图像,随着计算机的发展GPU的能力已经提升至非常强大了,所以只用来做图像数据的处理显然有点屈GPU了,所以GPU厂商开放了对GPU控制的API接口,用于开发者们来调用GPU做运算,由于Tensor Flow仅支持CUDA加速所以如果想要在GPU上进行Tensor Flow的训练必须要求你的GPU是支持CUDA的。

真正让Tensor Flow闻名的是AlphaGo,谷歌使用Tensor Flow训练了AlphaGo,并在2016年开始向各大围棋高手进行挑战,并取得最终胜利。

数据流图

Tensor Flow从名字就可以看出它的中心思想是什么,tensor:张量(即多维数组),flow :流动,即多维数据流动式的处理,就像水一样从一端起点流向另外一端终点在流动的过程中会每流动一次进行一次运算,其中每次处理都视为一个节点,所以这个流程很像流程图,所以Tensor Flow把这种处理数据的方式称为数据流图,这也是Tensof Flow的核心所在,只要数据能够转化为向量那么Tensor Flow就可以按照数据流的方式对它进行处理。


从上图需要理解一个东西叫做:,边即起始输入数据源,上图的Input A与B都是边,即最外边最开始的视图节点称为边,后续的称为运算节点,一般边就是输入的向量。

从边出发选择流动的方向,如“A”流动到“D”同时也会流动到“C”,最终流动到”E“,B也是如此,这些流动的顺序需要注意在一开始就已经在代码里定好的,是有序的流动,它不是无序的流动。

Tensor Flow会用结构体将每个要处理的向量数据存储到子成员变量中,然后在用类似链表指针的方式指向每个向量数据要处理的下一层要执行的函数,最后开始调用一层一层往下走,需要注意它不是无序的。

你可以把数据流图理解为Tensor Flow执行顺序的一个流程可视化,其次每次的数据传递都会是一个副本!

从上图还可以看到有许多分叉的连接与直线,直线是直接依赖,分叉线是间接依赖,可以看到“D”直接依赖于“B”,间接依赖于“A”,如果其中有一条依赖不满足都不会去执行“D”,这在流程图较大的情况下非常有效,可以有效省去一些不满足依赖的运算,比如我只想执行流程图中“D”节点,只需要满足“D”的依赖就可以了,其它的依赖一律不管,这样Tensor Flow在执行流程图时会自动判断依赖条件,选择性的执行节点。

基本架构


可以看到最底层API是C语言写的,这也代表Tensor Flow的移植性非常高

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

TensorFlow 是一个由 Google 开发并开源的深度学习框架,旨在为开发者提供一个灵活、高效的工具来构建训练深度学习模型。它支持多种算法模型结构,广泛应用于图像识别、自然语言处理、音频处理以及推荐系统等领域。该框架的设计目标是让研究人员开发者能够快速实现从研究到生产的整个流程,同时保证良好的性能可扩展性。 TensorFlow 的核心概念是使用**数据流图(Data Flow Graph)**来表示计算过程。在数据流图中,节点(Nodes)代表计算操作,边(Edges)则表示数据在这些操作之间的流动。数据以**张量(Tensor)**的形式在节点之间传递,张量可以理解为多维数组的扩展形式,支持各种数值运算变换。这种结构使得 TensorFlow 能够高效地进行大规模数值计算,并支持 GPU 分布式计算等高级功能。 TensorFlow 提供了丰富的 API 接口,允许用户定义操作神经网络结构。例如,可以通过简单的函数调用创建特定形状的张量: ```python import tensorflow as tf # 创建一个形状为(3, 4)的零张量 zero_tensor = tf.zeros((3, 4)) print(zero_tensor) ``` 上述代码展示了如何使用 `tf.zeros` 函数生成一个全零张量,这在初始化权重或占位时非常有用。此外,TensorFlow 还支持递归神经网络(RNN)等复杂结构的实现,通过 `RNNCell` 定义时间步的基本操作,并结合 `tf.nn.dynamic_rnn` 在时间维度上展开计算,从而构建完整的 RNN 模型。
07-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

17岁boy想当攻城狮

感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值