那只猫,Python中文社区专栏作者,Python中文社区新Logo设计人,纯种非CS科班数据分析人,沉迷Keras。在Cambridge做了点小事,深度学习的小学生。目录:
Tensorflow在Windows10的安装
Tensorflow,那么什么是Tensor?
为什么Tensorflow那么受欢迎?
CNTK分析。
Reference
Tensorflow在Windows10的安装
在Windows玩了很久的Tensorflow,但由于某些不可抗因素,硬是格式化了Windows。格式化完毕后立马装上Anaconda3,结果就在一个大坑里默默流眼泪——Tensorflow不支持最新的Python3.6。pip的效率是真的不算高,于是在下载都能失败好几次的情况下,我硬是被卡了半个多月。这篇教程算是给整个Tensorflow的Win平台填上最新的坑。(近乎所有的教程都是在Python3.6发布之前写的)
首先下载Anaconda3
注意,Tensorflow在Win环境下只支持Python3
同时,Anaconda3的下载不能下最新版,也就是只支持64位Python3.5。
而后就是经典的:
pip install tensorflow #如果你用CPU的话;
pip install tensorflow-gpu#如果你用GPU加速的话
这也是一般的套路告诉你的。不过其实完全可以直接去pypl的资源上直接迅雷啊什么的下下来,比较快、省时间。而后打开cmd,pip install
直接拖入你的文件到cmd,而后麻溜回车。
你以为就这么天真的:
import tensorflow as tf
print('TensorFlow version: {0}'.format(tf.__version__))
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))
你就会得到:
来自tensorflow的嘲讽。
在Google中沉浮数日,发现了大佬的解决方案:
pip install --upgrade http://ci.tensorflow.org/view/Nightly/job/nightly-win/85/DEVICE=cpu,OS=windows/artifact/cmake_build/tf_python/dist/tensorflow-1.0.0rc2-cp35-cp35m-win_amd64.whl
安装完毕之后,可以通过。
在这里,问过Tensorflow的作者之一——Adriano Carmezim
得到的回答是酱紫的:
>Apparently this issue is fixed at HEAD
but didn't make it to the release build.
也就是说,这是作者的坑。。。忽略就好。。。
Tensorflow,那么什么是Tensor?
tensor的对应到中文的解释是张量。为什么要讲tensor,主要就是鼎鼎大名的keras默认使用Tensorflow作为后端来进行张量的操作。而且tensor这个概念属于一种底层概念,如果一个做Deep Learning的人没有办法理解tensor,那么其使用Deep Learning的技巧和创新性也十分有限。
张量这个概念比较复杂,tensor可以理解成一种多维数组,张量可以看作是向量、矩阵的自然推广,表示广泛的数据类型。
复杂点并不是在计算机意义上的多维数组表示方法,往往比喻有降低复杂性的作用。
零阶张量是普通的数,是张量的最底层的存在,也是最容易理解的一个部分。
一阶张量是向量,是数的有序的组合的结果。
张量的核心便在于——组合。
同样的,将一阶张量再进行有序组合,得到二阶张量。线性代数告诉我们一个矩阵可以表示为n个列向量的和,相比大家能够猜到二阶张量可以对应到我们已经理解的矩阵。
如此,不断的迭代加深。
由于可以迭代到很高层,在高层以上,我们就不费心思研究Tensor在我们的认知中的对应关系。研究物理的前辈们很早就意识到向量和张量作为实体具有物理上的意义的,它超越了它们的分量所被表述的(经常是任意的)坐标系。
其实张量的理解,理解成一种不断组合不断升级并且没有天花板的高级数据类型就可以了。
比较像人话的,是无分量方法。它把张量首先视为抽象对象,表达了多线性概念的某种确定类型。操作张量的规则作为从线性代数到多重线性代数的推广出现。其方式是更现代的无分量向量方法在基于分量的方法用于给出向量概念的基本引例之后就取代了传统的基于分量的方法。
为什么Tensorflow那么受欢迎?
TensorFlow是相对高阶的机器学习库,用户可以方便地用它设计神经网络结构,而不必为了追求高效率的实现亲自写C++或CUDA18代码。在Tensorflow上可以很麻溜的跑自己的模型而不用担心自己的Neural Network的细节部分。而Tensorflow作为神级框架Keras的默认back-end以及Google帅气的号称秒世界的Edward库,无不体现Tensorflow目前的领军地位。
要说做DL的人最火大什么,无非就是各种细节上的纠结和各种求导,这个Theano做的也不错。不过使用Python时有一个影响效率的问题是,每一个mini-batch要从Python中feed到网络中,这个过程在mini-batch的数据量很小或者运算时间很短时,可能会带来影响比较大的延迟。
但是在这里说一下Theano的一个坏话:
配置真的很烦!编译真的很慢!
编译需要MinGW支持,MinGW据说在国内经常翻车。对于新人来说,一个import theano
就弄出一大堆C/C++代码,不免被震撼到。而后又要做许多的改造才能让theano
俯首称臣,这个自学轨迹不要太崎岖。
TensorFlow在定义新网络结构时,Theano通常需要长时间的编译,因此尝试新模型需要比较大的代价,而TensorFlow完全没有这个问题。
Tensorflow的教程真的是一搜一大把,在youtube上一搜,各种应用和教程五花八门,并且质量还普遍不低——毕竟玩DL的人不是学界大牛就是Keep Learning的典范。
内置的TF.Learn和TF.Slim等上层组件可以帮助快速地设计新网络,并且兼容Scikit-learn estimator接口,可以方便地实现evaluate、grid search、cross validation。并且据某老司机表示:只要可以将计算表示成计算图的形式,就可以使用TensorFlow。这就意味着,Tensorflow打破了Deep Learning这个概念框架的限制,在更多的领域也有自己的应用,可以写内层循环代码控制计算图分支的计算。TensorFlow也可以将计算图中的各个节点分配到不同的设备执行,充分利用硬件资源。
最值得小白们关注的就是——帅!
Tensorflow的TensorBoard,将网络结构和训练过程进行可视化,经常为了等编译,然后去冲一杯咖啡,路上碰上老板还是同学什么的,侃大山侃完,回来——还没做好。然鹅这个时候早已忘记了自己做到哪一步了,就一脸懵逼的看着电脑,或者一脸懊悔的看着自己手贱戳了键盘的某个键。
TensorBoard是TensorFlow的一组Web应用,用来监控TensorFlow运行过程,或可视化Computation Graph。TensorBoard目前支持5种可视化:标量(scalars)、图片(images)、音频(audio)、直方图(histograms)和计算图(Computation Graph)。TensorBoard的Events Dashboard可以用来持续地监控运行时的关键指标,比如loss、学习速率(learning rate)或是验证集上的准确率(accuracy);Image Dashboard则可以展示训练过程中用户设定保存的图片,比如某个训练中间结果用Matplotlib等绘制(plot)出来的图片;Graph Explorer则可以完全展示一个TensorFlow的计算图,并且支持缩放拖曳和查看节点属性。
CNTK分析
CNTK是MSRA开源的深度学习框架。在语音识别领域的使用尤其广泛。CNTK设计是性能导向的,从各种成绩上来看是非常的卓越——对,比Tensorflow厉害!
CNTK这个框架也很尴尬的和Tensorflow一样,对Python的支持又是只支持Python3.5
但是CNTK有个非常非常非常尴尬的一个局面:
真的!真的!很复杂!
并且没有Keras这样的神级辅助助推。
安装方法也是:
pip install https://cntk.ai/PythonWheel/CPU-Only/cntk-2.0.beta12.0-cp35-cp35m-win_amd64.whl
感兴趣的、想研究CNTK的筒子们可以直接爬下来。
性能是真的比Tensorflow高,同时你能用CNTK弄好,也代表了你的实力,毕竟CNTK的的确确的比Tensorflow更复杂一点,但是还是可以接受的。
Reference
MNIST数据
Kears文档
CNTK PythonAPI
CNTK Python配置
优秀人才不缺工作机会,只缺适合自己的好机会。但是他们往往没有精力从海量机会中找到最适合的那个。
100offer 会对平台上的人才和企业进行严格筛选,让「最好的人才」和「最好的公司」相遇。
扫描下方二维码,注册 100offer,谈谈你对下一份工作的期待。一周内,收到 5-10 个满足你要求的好机会!
— Life is short,we use Python —