tensorflow怎么用,tensorflow菜鸟教程
- 软件开发
- 2023-08-13
- 414
大家好,tensorflow怎么用相信很多的网友都不是很明白,包括tensorflow菜鸟教程也是一样,不过没有关系,接下来就来为大家分享关于tensorflow怎么用...
大家好,tensorflow怎么用相信很多的网友都不是很明白,包括tensorflow菜鸟教程也是一样,不过没有关系,接下来就来为大家分享关于tensorflow怎么用和tensorflow菜鸟教程的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!
如何学习tensorflow
tensorflow是目前非常流行的基于Python的机器学习框架,先要学一些python基础,如果没有学过python,可以先找一些python入门的教程来学习,了解一些基础的语法,能编写和运行简单的python程序即可;
tensorflow的网上教程很多的,官方网站上就有免费教程:https://tensorflow.google.cn/resources/learn-ml
https://tensorflow.google.cn/tutorials/
如果您想找老师辅导您学习tensorflow,可以报名一些收费的tensorflow网络课程来学习。
tensorflow哪个版本更新最好
tensorflow2.x版本最好
TensorFlow1和TensorFlow2.x之间有很多变化。第一个是Tensorflow.js.的发布。随着Web应用程序越来越占主导地位,在浏览器上部署模型的需求大大增加。借助Tensorflow.js,你可以使用Node在浏览器中运行现有的python模型、重新训练现有的模型,并使用Javascript完全构建和训练模型(不需要python)。
Tensorflow2.x中的另一个版本是TensorflowLite,一个轻量级库,用于在移动和嵌入式设备上部署模型。这是因为移动和Web应用程序是两种最主要的应用程序类型。使用TensorflowLite,你可以简单地将现有模型转换为「compressedflatbuffer」,然后将buffer加载到移动设备或任何其他嵌入式设备中。这期间发生的主要优化过程是将32位浮点值转换成8位,这更适合于嵌入式设备(更少的内存使用)。
怎样用C++写出你自己的TensorFlow
在我们开始讲解前,可以先看看最终成型的代码:
1.分支与特征后端
2.仅支持标量的分支
这个工程是我与MinhLe一起完成的。
为什么?如果你修习的是计算机科学(CS)的人的话,你可能听说过这个短语「不要自己动手____」几千次了。它包含了加密,标准库,解析器等等。我想到现在为止,它也应该包含机器学习库(MLlibrary)了。
不管现实是怎么样的,这个震撼的课程都值得我们去学习。人们现在把TensorFlow和类似的库当作理所当然了。他们把它看作黑盒子并让他运行起来,但是并没有多少人知道在这背后的运行原理。这只是一个非凸(Non-convex)的优化问题!请停止对代码无意义的胡搞——仅仅只是为了让代码看上去像是正确的。
TensorFlow
在TensorFlow的代码里,有一个重要的组件,允许你将操作串在一起,形成一个称为「图形运算符」(此处英文错误?正确英文应为GraphOperator)的东西。这个操作图是一个有向图G=(V,E)G=(V,E),在某些节点处u1,u2,…,un,v∈Vu1,u2,…,un,v∈V,和e1,e2,…,en∈E,ei=(ui,v)e1,e2,…,en∈E,ei=(ui,v)。我们知道,存在某种操作图从u1,…,unu1,…,un映射到vv.
举个例子,如果我们有x+y=z,那么(x,z),(y,z)∈E(x,z),(y,z)∈E.
这对于评估算术表达式非常有用,我们能够在操作图的汇点下找到结果。汇点是类似v∈V,?e=(v,u)v∈V,?e=(v,u)这样的顶点。从另一方面来说,这些顶点从自身到其他顶点并没有定向边界。同样的,输入源是v∈V,?e=(u,v)v∈V,?e=(u,v).
对于我们来说,我们总是把值放在输入源上,而值也将传播到汇点上。
反向模式分化如果你觉得我的解释不正确,可以参考下这些幻灯片的说明。
差异化是Tensorflow中许多模型的核心需求,因为我们需要它梯度下降的运行。每一个从高中毕业的人都应该知道差异化的意思。如果是基于基础函数组成的复杂函数,则只需要求出函数的导数,然后做链式法则。
在5分钟内倒转模式
所以现在请记住我们运行操作符时用的有向无环结构(DAG=DirectedAcyclicGraph=有向无环图),还有上一个例子用到的链式法则。做出评估,我们能看到像这样的
x->h->g->f
作为一个图表,在f它能够给予我们答案。然而,我们也可以反过来:
dx<-dh<-dg<-df
这样它看起来就像链式法则了!我们需要把导数相乘到最终结果的路径上。
这里是一个操作符的例子:
所以这将衰减为一个图的遍历问题。有谁感觉到这是个拓扑排序和深度优先搜索/宽度优先搜索?
是的,所以为了在双方面都支持拓扑排序,我们需要包含一套父组一套子组,而汇点是另一个方向的来源。反之亦然。
执行在学校开学前,MinhLe和我开始设计这个工程。我们决定使用后端的特征库进行线性代数的运算。他们有一个叫做MatrixXd的矩阵类。我们在这儿使用那个东西。
classvar{//Forwarddeclarationstructimpl;public://Forinitializationofnewvarsbyptrvar(std::shared_ptr<impl>);var(double);var(constMatrixXd&);var(op_type,conststd::vector<var>&);...//Access/ModifythecurrentnodevalueMatrixXdgetValue()const;voidsetValue(constMatrixXd&);op_typegetOp()const;voidsetOp(op_type);//Accessinternals(nomodify)std::vector<var>&getChildren()const;std::vector<var>getParents()const;...private://PImplidiomrequiresforwarddeclarationoftheclass:std::shared_ptr<impl>pimpl;};structvar::impl{public:impl(constMatrixXd&);impl(op_type,conststd::vector<var>&);MatrixXdval;op_typeop;std::vector<var>children;std::vector<std::weak_ptr<impl>>parents;};
在这儿,我们曾使用过一个叫「pImpl」的习语,意识是「执行的指针」。它对很多东西都很好,比如接口的解耦实现,以及当我们在堆栈上有一个本地接口时,允许我们实例化堆上的东西。一些「pImpl」的副作用是微弱的减慢运行时间,但是编译时间缩短了很多。这允许我们通过多个函数调用/返回来保持数据结构的持久性。像这样的树形数据结构应该是持久的。
我们有一些枚举来告诉我们目前正在进行哪些操作:
enumclassop_type{plus,minus,multiply,divide,exponent,log,polynomial,dot,...none//nooperators.leaf.};
执行此树的评估的实际类称为expression:
classexpression{public:expression(var);...//Recursivelyevaluatesthetree.doublepropagate();...//Computesthederivativefortheentiregraph.//Performsatop-downevaluationofthetree.voidbackpropagate(std::unordered_map<var,double>&leaves);...private:varroot;};
在回溯里,我们有一些做成类似这样的代码:
backpropagate(node,dprev):
derivative=differentiate(node)*dprev
forchildinnode.children:
backpropagate(child,derivative)
这几乎是在做一个深度优先搜索;你看到了吧?
为什么是C++?
在实际过程中,C++可能不是合适的语言来做这些事儿。我们可以在像「Oaml」这样的函数式语言中花费更少的时间来开发。现在我明白为什么「Scala」被用于机器学习中,主要就是因为「Spark」
然而,这很明显有利于C++。
Eigen(库名)
举例来说,我们可以直接使用一个叫「Eigen」的TensorFlow的线性代数库。这是一个不假思索就被人用烂了的线性代数库。有一种类似于我们的表达式树的味道,我们构建表达式,它只会在我们真正需要的时候进行评估。然而,对于「Eigen」来说,他们在编译的时间内就决定使用什么模版,这意味着运行的时间减少了。我对写出「Eigen」的人抱有很大的敬意,因为查看模版的错误几乎让我眼瞎!
他们的代码看起来类似这样的:
MatrixA(...),B(...);autolazy_multiply=A.dot(B);typeid(lazy_multiply).name();//theclassnameissomethinglikeDot_Matrix_Matrix.Matrix(lazy_multiply);//functional-stylecastingforcesevaluationofthismatrix.
这个特征库非常的强大,这就是为什么它是TensortFlow使用这些代码作为主要后端之一的原因。这意味着除了这个慢吞吞的评估技术之外还有其他的优化。
运算符重载
在Java中开发这个库很不错——因为没有shared_ptrs,unique_ptrs,weak_ptrs;我们得到了一个真实的,有用的图形计算器(GC=GraphingCalculator)。这大大节省了开发时间,更不必说更快的执行速度。然而,Java不允许操作符重载,因此它们不能这样:
//These3linescodeupanentireneuralnetwork!varsigm1=1/(1+exp(-1*dot(X,w1)));varsigm2=1/(1+exp(-1*dot(sigm1,w2)));varloss=sum(-1*(y*log(sigm2)+(1-y)*log(1-sigm2)));
顺便说一下,上面是实际的代码。是不是非常的漂亮?我想说的是对于TensorFlow里面,这比使用Python封装来的更优美!这只是让你知道,它们也是矩阵而已。
在Java中,有一连串的add(),divide()等等是非常难看的。更重要的是,这将让用户更多的关注在「PEMDAS」上,而C++的操作符则有非常好的表现。
特性,而不是一连串的故障
在这个库中,有一些东西是可以指定的,它没有明确的应用程序编程接口(API=ApplicationProgrammingInterface),或者有但我知道。举例子,实际上,如果我们只想训练一个特定的权重子集,我们只可以回溯到我们感兴趣的特定来源。这对于卷积神经网络的转移学习非常有用,因为很多时候,像VGG19这样的大网络被斩断,会附加了一些额外的层,根据新的域名样本来训练权重。
基准
在Python的TensorFlow库中,对虹膜数据集上的10000个「Epochs」进行训练以进行分类,并使用相同的超参数,我们有:
1.TensorFlow的神经网络:23812.5ms
2.「Scikit」的神经网络:22412.2ms
3.「Autodiff」的神经网络,迭代,优化:25397.2ms
4.「Autodiff」的神经网络,迭代,无优化:29052.4ms
5.「Autodiff」的神经网络,带有递归,无优化:28121.5ms
令人惊讶的是,Scikit是所有这些中最快的。这可能是因为我们没有做庞大的矩阵乘法。也可能是TensorFlow需要额外的编译步骤,如变量初始化等等。或者,也许我们不得不在python中运行循环,而不是在C中(Python循环真的非常糟糕!)我对自己也不是很自信。我完全意识到,这绝不是一种全面的基准测试,因为在特定的情况下,它只适用于单个数据点。然而,库的表现并不能代表行为状态,因为我们不需要回滚我们自己的TensorFlow。
如何用TensorFlow实现GAN
基本使用使用TensorFlow,必须明白TensorFlow:使用图(graph)表示计算任务.称(Session)文(context)执行图.使用tensor表示数据.通变量(Variable)维护状态.使用feedfetch任意操
tensorflow如何使用GPU来加速训练
Tensorflow支持GPU,而且默认情况下,在操作同时支持GPU和CPU的情况下,会优先使用GPU。所以Tensorflow的GPU加速训练是开箱即用的,唯一需要注意的是安装的时候不要装错了版本。
如何安装正确版本首先,确保你的硬件没问题。一般来说,不是太老或太低端的N卡基本上都没问题。具体支持的硬件可以查看Nvidia的文档(https://developer.nvidia.com/cuda-gpus),根据你的显卡所属的系列,查看是否支持(需要支持CUDA3.5以上,CUDA3.0以上,但小于3.5的话,需要通过源码编译安装Tensorflow)。
(Nvidia网站截屏)
其次,确保你的软件依赖没问题:
显卡驱动CUDAToolkit9.0cuDNNSDKv7libcupti-devNVIDIATensorRT3.0(可选)然后,就是安装TensorFlow了。
注意,通过`pipinstalltensorflow`安装的是CPU版本!你需要使用`pipinstalltensorflow-gpu`!pip3同理。相应地,如果你选择通过docker安装,也别忘了加上-gpu后缀,比如`nvidia-dockerrun-ittensorflow/tensorflow:latest-gpubash`。
现在对TensorFlow很感兴趣很想学,想全面初步了解一下,有相关文章吗
人工智能无疑是当今科技届的热点领域,各大公司也在大力的投入。深度学习作为其热门技术,期间也产生了各种各样的深度学习智能框架。比如TensorFlow,Caffe,CNTK,Theano等等,其中TensorFlow毋庸置疑的成为了最热的热点。那么对于非专业研究者的开发人员甚至非开发人员,我们如何入门呢?接下来小编为大家整理了一些深度学习TensorFlow的入门资源。(主要是一些长期教程)
官网https://www.tensorflow.org/
官网无论什么都是入门必看的重点。官网介绍了,如何安装使用TensorFlow,已经TensorFlow的API文档。里面还包含TensorFlow主要功能的详细指南。这里就不过多的介绍了
Kerashttp://keras-cn.readthedocs.io/en/latest/
Keras是一个高层神经网络API,Keras由纯Python编写而成并基Tensorflow、Theano以及CNTK后端。Keras为支持快速实验而生,能够把你的idea迅速转换为结果,如果你有如下需求,请选择Keras:
简易和快速的原型设计(keras具有高度模块化,极简,和可扩充特性)
支持CNN和RNN,或二者的结合
无缝CPU和GPU切换
为什么我会推荐Keras呢,因为从TensorFlow1.0开始,官方已经正式在TF中加入了Keras,同时,他的便捷性和简单性也值得使用。
谷歌机器学习速成课程https://developers.google.com/machine-learning/crash-course/
这是谷歌推出的机器学习热爱者的自学指南,包含一系列视频讲座课程、实际案例分析和实践练习。可以在看视频后,进行一些检验,也包含一些代码的训练。是一套不存的视频课程,而且全面支持中文(PS:机器学习生成的中文口音,怪怪的)
Udacity优达学城https://cn.udacity.com/course/deep-learning--ud730
谷歌在Udacity上的深度学习课程,在这里你将透彻理解深度学习,教授你如何训练和优化基本神经网络、卷积神经网络和长期神经网络。解决学习一系列曾经以为非常具有挑战性的新问题,并在你用深度学习方法轻松解决这些问题的过程中更好地了解人工智能的复杂属性。总之是一套很不错教学视频,包含课后习题。这个教学项目目前是免费的。
莫烦Pythonhttps://morvanzhou.github.io/
我在最早接触Python和深度学习就是在这里,一个喜欢学到什么就分享什么的人,分享过很多python,机器学习的知识。非常不错的教学视频,重点是都是中文的。
廖雪峰https://www.liaoxuefeng.com/
小白的Python新手教程,具有如下特点:中文,免费,零起点,完整示例,基于最新的Python3版本。一个非常棒的Python学习网站,TensorFlow最适合的语言自然是Python了,值得学习。
Stanford的CS20SI课程,专门针对TensorFlow的课程https://web.stanford.edu/class/cs20si/
斯坦福大学的TensorFlow学习课程,英文的所有一定难度。课程将涵盖Tensorflow的基本原理和用法。旨在帮助学生理解TensorFlow的图形计算模型,探索其提供的功能,并学习如何构建和构建最适合深度学习项目的模型。通过课程,学生将使用TensorFlow构建不同复杂度的模型,从简单的线性/逻辑回归到卷积神经网络和递归神经网络,以解决词嵌入,翻译,光学字符识别,强化学习等任务。学生还将学习最佳实践来构建模型并管理研究实验。
重点!网红SirajRavalhttps://www.youtube.com/channel/UCWN3xxRkmTPmbKwht9FuE5A
这是我最喜欢的一个频道,SirajRaval已经成为了一位网红,天成的程序员表演家,技术达人。他分享了大量的机器学习视频,风趣而幽默。而且每个视频下都配了他的Github仓库,里面有他写好的代码。他的视频风格让人印象非常深刻。是一个很不错的学习频道。
上述只是我列的一些帮助我们入门的教程,是非常入门的。更适合像我们这些没有太深数学基础的程序员和非程序员。以后还会给大家发一些深度一些的资源,欢迎大家持续关注。
OK,本文到此结束,希望对大家有所帮助。
本文链接:http://xinin56.com/ruanjian/1246.html