TensorFlow 如何入门?

我本科不是学计算机的,现在在入门深度学习,因此我现在在对比 TensorFlow 中英文文档在学(一个是英文官方,一个是极客学院的中文文档): https://www.tensorflow.org/versions/master/tutorials/index.html TensorFlow官方文档中文版_TensorFlow中文教程_TensorFlow开发中文手册[PDF]下载 然后我发现看教程时,原理都看得懂,但看代码时,TensorFlow每一个教程的代码的实现方式都不一样,没有标准(估计是不同的人写的),而…
关注者
7220
被浏览
385497

38 个回答

李沐大神说过,深度学习框架就是丹炉.
  1. google丹炉的使用说明书:确实是很完善,从最开始出来到现在一直在更新,有段时间不看文档,发现对了好多contrib的文档内容(这个特别棒,建议持续关注),所以,所以一直要持续的关注/学习;
  2. 炼丹友的反馈:做实验用第三方框架 tflearn, tensorlayer都很好,不过个人感觉还是要先猜猜原生tensorflow源码的坑,所以在github上,watch tensorflow这个项目是必须的,尤其是没事看看别人提的issue,很多时候会避免在之后你用到的问题;
  3. 定位自己的方向:就是你做的这块的内容在tensorflow的体现,比如本人做cv的,会去关注tensorflow/model下的各种cv方向的tensorflow/models,会去读它的代码实现,google的工程实现确实很厉害,代码很完善,看着很漂亮,是种享受,还有就是github其他的基于tensorflow的cv下的内容,挑star高的去看下,过不了多久,你就会慢慢模仿着用来写自己的model,而且会显得很专业;
  4. 关注丹方: TensorFlow就是一套工具,无论是mxnet、torch、paddle,真正我们要做的是用某套工具把我们熟悉,了解的丹方炼出来,google model下tensorflow/models里面很最新的image下的丹方,建议多熟悉熟悉,如果发现其他框架比如tflearn,tensorlayer,mxnet上没有的可以去尝试用别的丹炉炼出来,这个很有用的,本人用tflearn写过googlenet,inception-resnet-v2,用mxnet写过inception-resnet-v2,难度不大但你会学到从头到尾去熟悉丹炉;
  5. 第三方支持框架: tensorflow出来后有很多高级的第三方包,例如tflearn,keras,tensorlayer,提供高级的api用来快速实现某些功能,但是我觉得更大的好处其实不是快速写好某个模型,而是其内部专业的高级api的代码实现,极其值得参考,本人比较熟悉tflearn,tflearn里面的各种layer的写法简直是教科书级别的,童靴们在写tensorflow源码的时候完全可以拿来参考
  6. 金丹使用: model训练出来,如何使用?做inference还是保存下来对新的task做pretrained+fine-tuning,这些都要关注,具体可以去看看例如neural style的model还有一些图像分类比赛使用pretrained model的源码;
  7. 框架底层的学习: 本人在这块不熟悉,但是个人觉得还是很有必要掌握这些,我之后会在一段时间好好关注下这部分,读读轻量级框架pjreddie/darknettiny-dnn/tiny-dnn的源码
最后不要脸地推荐下我博客的几篇相关文章:
TensorFlow入门一-小石头的码疯窝
TensorFlow之深入理解Neural Style
TensorFlow之深入理解AlexNet-小石头的码疯窝
TensoFlow之深入理解GoogLeNet-小石头的码疯窝
TensorFlow之深入理解VGG\Residual Network
TensorFlow之深入理解Fast Neural Style
风格画之最后一弹MRF-CNN-小石头的码疯窝
深度学习之Neural Image Caption
MXnet初体验之inception-resnet-v2从Model到Predict-小石头的码疯窝
作者:硅谷周边
链接:如何高效的学习TensorFlow代码? - 硅谷周边的回答
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

Google发布了Tensorflow游乐场。Tensorflow是Google今年推出的机器学习开源平台。而有了Tensorflow游乐场,我们在浏览器中就可以训练自己的神经网络,还有酷酷的图像让我们更直观地了解神经网络的工作原理。今天,就让硅谷周边带你一起去Tensorflow游乐场快乐地玩耍吧!


昨天,Google深度学习部门Google Brain的掌门人,也是Google里受万众景仰的神级别工程师Jeff Dean,在Google Plus上发布了Tensorflow游乐场的消息:




于是小伙伴们都十分激动地去Tensorflow的网站上玩神经网络了!游乐场的地址是:playground.tensorflow.org。让我们快点一起去看看游乐场里有哪些好玩的东东吧。


一打开网站,就看见上面的标语:



“在你的浏览器中就可以玩神经网络!不用担心,怎么玩也玩不坏哦!”


这简直太令人振奋了!面对这么多可以随便点的按钮,咱们从哪儿开始呢?




首先让我们来看看数据。在这个游乐场中,我们有4种不同形态的数据可以玩:




每组数据,都是不同形态分布的一群点。每一个点,都与生俱来了2个特征:x1和x2,表示点的位置。而我们数据中的点有2类:橙色和蓝色。我们的神经网络的目标,就是通过训练,知道哪些位置的点是橙色、哪些位置的点是蓝色。


如果橙色是橙子,蓝色是蓝莓。假设我们有2000个散落在各处的橙子和蓝莓。前1000个,我们知道坐标(1,1)的是蓝莓,(2,2)的是橙子,(0.5,0.5)的是蓝莓等等。我们要用这些信息来训练我们的神经网络,让它能够准确地预测出后1000个哪些是橙子、哪些是蓝莓。


看上面的4组数据,我们会发现,前3中都能相对简单地区分开,而最后一组螺旋数据会是最难的。


Tensorflow游乐场中的数据十分灵活。我们可以调整noise(干扰)的大小,还可以改变训练数据和测试数据的比例多少。下图是不同noise的数据分布。




当我们把每一个数据点的信息喂给机器学习系统时,我们需要做feature extraction,也就是特征提取。如果我们真的是在区分蓝莓和橙子的话,大小、颜色等等都会是我们的特征。而这里,每一个点都有x1和x2两个特征。除此之外,由这两个特征还可以衍生出许多其他特征:




抽象来说,我们的机器学习classifier(分类器)其实是在试图画一条或多条线。如果我们能够100%正确地区分蓝色和橙色的点,蓝色的点会在线的一边,橙色的会在另一边。


上面这些图其实非常的直观。第一张图中,如果x1作为我们的唯一特征,我们其实就是在画一条和x1轴垂直的线。当我们改变参数时,其实就是在将这条线左右移动。其他的特征也是如此。


很容易可以看出,我们需要智能地结合这其中一种或多种的特征,才能够成功地将蓝色点和橙色点分类。这样的feature extraction,其实往往是机器学习应用中最难的部分。好在我们有神经网络,它能够帮我们完成大部分的任务。


如果我们选定x1和x2作为特征,我们神经网络的每一层的每个神经元,都会将它们进行组合,来算出结果:




而下一层神经网络的神经元,会把这一层的输出再进行组合。组合时,根据上一次预测的准确性,我们会通过back propogation给每个组合不同的weights(比重)。这里的线越粗,就表示比重越大:




下面就让我们用最难的螺旋形数据,来试试这个神经网络的表现吧!


在神经网络出现前,我们往往会竭尽所能地想出尽可能好的特征,把它们全都喂给系统。而系统会是个十分浅的系统,往往只有一层。用这样的方法来完成分类。


让我们先来实验传统的方法。在这里,我们将所有能够想到的7个特征都输入系统,并选择只有1层的神经网络:



最后的结果是这样的,可以看出我们的单层神经系统几乎完美地分离出了橙色点和蓝色点:




接下来,让我们来体验神经网络真正的魔法。神经网络最大的魔力,就在于我们根本不需要想出各种各样的特征,用来输入给机器学习的系统。我们只需要输入最基本的特征x1, x2, 只要给予足够多层的神经网络和神经元,神经网络会自己组合出最有用的特征。


在这次试验中,我们只输入x1, x2,而选择1个6层的,每层有8个神经元的神经网络:



最后的结果是这样的。我们发现,通过增加神经元和神经网络的层数,即使没有输入许多特征,我们也能够成功地分类:


神经网络的伟大之处就在于此。当我们在解决分类橙色点和蓝色点这样的简单问题时,想出额外的特征似乎并不是难事。但是,当我们要处理的问题越来越复杂,想出有用的特征就变成了最最困难的事。比如说,当我们需要识别出哪张图片是猫,哪张图片是狗时,哪些特征是真正有效的呢?


而当我们有了神经网络,我们的系统自己就能学习到哪些特征是有效的、哪些是无效的,这就大大提高了我们解决复杂机器学习问题的能力,简直是太酷啦!


看了以上的文章,你是不是对神经网络有了更直观的认识呢?好奇的小伙伴们,欢迎去playground.tensorflow.org自己试试看,真的非常好玩!

weixin.qq.com/r/2Dno8Ij (二维码自动识别)

为什么?