前言

前面两篇主要写了一些机器学习的基础概念,从本篇开始我们来了解下深度学习。深度学习是机器学习的一个子集,是一种特殊的数学模型。同样是从输入到输出,深度学习在这两者之间会有很多层称为“隐层”(Hidden Layers)的层,每一层将会将输入内容进行计算并自我调节,最终得到合理模型,这种数学模型非常像人类目前对大脑工作原理的认知,所以也称之为“人工神经网络”。

现在市面上有数十种深度学习框架:Wiki传送门。一个个学过来肯定精力不够,那我们就学综合评分最高的那个:Tensorflow

Tensorflow是由Google团队在2015年11月9日以Apache 2.0开源许可证开源的,但刚发布的版本有诸多缺陷:bug比较多、性能比较差、使用难度比较高。在2017年2月16日,Google宣布Tensorflow 1.0正式发布,该版本适用于工业生产场景。所以在该版本发布之后,对深度学习领域产生了极大的影响,其大大简化了编写深度学习的代码难度,并且在Google这面大旗下,被各种专业人员以及机器学习爱好者所推崇(截止2018年1月9日,TensorflowGithub上已经有7193个Watch,85038个Star和41555个Fork)。

Tensorflow在短短发布后的一年不到的时间里,已经跃居为综合排名第一的深度学习框架。为什么会如此火爆呢?我个人猜测理由如下:

  • 深度学习目前是大趋势(所以得抓紧学习,抓住机遇)

  • Google的技术实力太强大,开源过很多项目都非常成功(比如Android),所以跟着Google走可能不会让我们失望

  • 接口丰富易用且支持多种语言(底层是C++实现的,这里指的是客户端调用底层API的语言),如Python、C++、Java、Go

  • 易于部署,包括分布式部署

本机安装Tensorflow

如果你的电脑性能还不错,可以考虑直接在本机安装Tensorflow官方安装文档传送门),优先考虑使用Anaconda来安装,按照官方教程一步步执行即可。

安装之后,需要在Pycharm中执行Tensorflow的代码,我们这里先用简单的输出常量的代码为例(此代码也是后文中demo1.py中的代码):

import tensorflow as tf

node1 = tf.constant(3.0, dtype=tf.float32)
node2 = tf.constant(4.0) # also tf.float32 implicitly
print(node1, node2) sess = tf.Session()
print(sess.run([node1, node2]))

常见错误汇总

执行代码的时候,你可能会遇到很多错误,我这里整理了一份我在此过程中遇到的错误以及对应的解决方案供大家参考:

错误提示 解决方案
Anaconda installation is not found https://stackoverflow.com/questions/47624777/pycharm-anaconda-installation-is-not-found
ImportError: Could not find 'cudart64_80.dll'. TensorFlow requires that this DLL be installed in a directory that is named in your %PATH% environment variable. 由于目前Tensorflow是建立在CUDA 8.0之上的,而NVIDIA官网上默认是下载CUDA最新版本的(比如目前是9.0),所以需要打开如下页面: https://developer.nvidia.com/cuda-downloads 在页面的最下面找到Lagacy Releases并下载CUDA 8.0
ImportError: Could not find 'cudnn64_6.dll'. TensorFlow requires that this DLL be installed in a directory that is named in your %PATH% environment variable. Note that installing cuDNN is a separate step from installing CUDA, and this DLL is often found in a different directory from the CUDA DLLs. You may install the necessary DLL by downloading cuDNN 6 from this URL: https://developer.nvidia.com/cudnn 注册一个NVEDIA的开发者账号,然后下载cudnn64 for cuda8 on windows。 下载下来的文件解压之后,放到cuda目录下对应的地方(cuda比如是在C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0)

解决了所有问题之后,如果看到以下输出内容,就表示能正常运行Tensorflow了:

Tensor("Const:0", shape=(), dtype=float32) Tensor("Const_1:0", shape=(), dtype=float32)
2018-01-09 16:48:59.940050: I C:\tf_jenkins\home\workspace\rel-win\M\windows\PY\36\tensorflow\core\platform\cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2
[3.0, 4.0] Process finished with exit code 0

使用阿里云PAI来实验Tensorflow

概述

因为机器学习的过程非常耗性能,如果在一个比较大的数据集上进行学习,本机CPU使用就会达到99%,而且要持续很久,这个时候就无法干点别的事了。很幸运,阿里云提供了机器学习平台PAI(Platform for Artificial Intelligence),里面集成了很多主流的算法以及Tensorflow的不同版本(目前是1.0、1.1、1.2),而且目前公测阶段也可以开启2个GPU来加快执行。

PAI的优势有:

  • 不需要本地繁琐的安装和解决各种安装坑

  • 可以调用云服务器资源,比起本地性能更好

  • 不影响、阻塞本机其他程序的使用,开始执行之后等着执行完毕即可

  • 算法、组件都是现成的,而且可以用拖拽的方式编排算法,非常方便、傻瓜化,我们唯一要做的就是提供数据和编写核心执行脚本

  • 现成的机器学习案例以及相关文档,可以快速从别人的经验中来帮助自己理解机器学习

  • 将实验直接共享到社区

  • 公测阶段免费

操作概览

开通PAI的过程并不复杂,大致步骤如下:

  • 首先你要有一个阿里云账号

  • 在阿里云后台进入大数据(数加)->机器学习菜单

  • 创建一个项目,如: my_project_name

  • 在项目管理页面,勾选my_project_name开启GPU选项

  • 为了方便上传本地资源到PAI,建议安装OSS-Browser工具,下载地址: https://help.aliyun.com/document_detail/61872.html?spm=5176.doc31886.2.5.qwodVb (以阿里云后台最新下载地址为准),如果是少量文件上传的话,使用web版OSS文件管理系统来管理文件也可以(本例中我们直接使用web版)

PS:开启GPU选项示意图:

目前公测阶段虽然PAI本身是免费的,但是OSS是收费的,好在费用很低,仅作学习用的话,一天最多几分钱。

详细实验步骤

  1. 在OSS中创建测试目录tensorflowtest

  2. 进入tensorflowtest目录并上传脚本文件demo1.py(内容详见“本机安装Tensorflow”一节):

  3. 进入PAI后台首页,创建空白实验tensorflowdemo



  4. 在空白实验中加入读OSS Bucket组件和TensorFlow(V1.2)组件,并选中Tensorflow节点,在右侧的参数设置中,将Python代码参数选为我们在步骤1、2中上传的demo1.py文件:

  5. 点击屏幕最下方的运行按钮执行实验:

本例中读OSS Bucket组件并没有什么用,由于PAI实验中必须要数据源节点,因此添加空的读OSS Bucket组件作为数据源,因此在执行实验的时候,阿里云将检测并提示当前实验室作业实验,将会在24小时内删除。

查看执行结果

  1. 在实验运行后,每个节点右侧出现一个绿色的勾,表示已正确执行完毕,此时右键该节点,选择查看日志选项:

  2. 在“查看日志”弹出框中,滚动到中间的位置,找到 http://logview.odps.aliyun.com 的链接,如图位置:

  3. 鼠标左键点击进入之后,点击下图中红色框中的detail图标:

  4. 在弹出的Log Detail页面上,按下图中的1、2、3顺序依次点击:

  5. 在弹出的Logview[Stdout]页面上,可以最终看到脚本的实际输出内容,与在本地IDE中的输出一致:

结语

我已经用两种不同的方式,执行了第一个基于Tensorflow的demo,这个demo目前跟深度学习还完全搭不上边,只是能成功运行Tensorflow而已,后续的博文中,我将进一步深入研究。


本文在我的博客园我的个人博客上同步发布,作者保留版权,转载请注明来源。

机器学习笔记3-Tensorflow简介的更多相关文章

  1. Google TensorFlow 学习笔记一 —— TensorFlow简介

    "TensorFlow is an Open Source Software Library for Machine INtenlligence" 本笔记参考tensorflow. ...

  2. [机器学习笔记]奇异值分解SVD简介及其在推荐系统中的简单应用

    本文先从几何意义上对奇异值分解SVD进行简单介绍,然后分析了特征值分解与奇异值分解的区别与联系,最后用python实现将SVD应用于推荐系统. 1.SVD详解 SVD(singular value d ...

  3. [机器学习笔记]主成分分析PCA简介及其python实现

    主成分分析(principal component analysis)是一种常见的数据降维方法,其目的是在“信息”损失较小的前提下,将高维的数据转换到低维,从而减小计算量. PCA的本质就是找一些投影 ...

  4. 【Machine Learning】机器学习及其基础概念简介

    机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  5. 机器学习笔记5-Tensorflow高级API之tf.estimator

    前言 本文接着上一篇继续来聊Tensorflow的接口,上一篇中用较低层的接口实现了线性模型,本篇中将用更高级的API--tf.estimator来改写线性模型. 还记得之前的文章<机器学习笔记 ...

  6. 第四百一十六节,Tensorflow简介与安装

    第四百一十六节,Tensorflow简介与安装 TensorFlow是什么 Tensorflow是一个Google开发的第二代机器学习系统,克服了第一代系统DistBelief仅能开发神经网络算法.难 ...

  7. Python机器学习笔记:使用Keras进行回归预测

    Keras是一个深度学习库,包含高效的数字库Theano和TensorFlow.是一个高度模块化的神经网络库,支持CPU和GPU. 本文学习的目的是学习如何加载CSV文件并使其可供Keras使用,如何 ...

  8. Python机器学习笔记:不得不了解的机器学习知识点(2)

    之前一篇笔记: Python机器学习笔记:不得不了解的机器学习知识点(1) 1,什么样的资料集不适合用深度学习? 数据集太小,数据样本不足时,深度学习相对其它机器学习算法,没有明显优势. 数据集没有局 ...

  9. tensorflow学习笔记——使用TensorFlow操作MNIST数据(1)

    续集请点击我:tensorflow学习笔记——使用TensorFlow操作MNIST数据(2) 本节开始学习使用tensorflow教程,当然从最简单的MNIST开始.这怎么说呢,就好比编程入门有He ...

  10. Python机器学习笔记:SVM(1)——SVM概述

    前言 整理SVM(support vector machine)的笔记是一个非常麻烦的事情,一方面这个东西本来就不好理解,要深入学习需要花费大量的时间和精力,另一方面我本身也是个初学者,整理起来难免思 ...

随机推荐

  1. NDK开发过程自认为好的一些参考资料

    虽然NDK开发时间很短, 但也接触了一些自认为还不错的资料, 记录下来. 一.首先就说官方文档吧 网上资料好多过时了, 并且有点参差不齐. 所以看官方文档还是很有必要的,我根据我的需求整理了两个的链接 ...

  2. 电脑创建WIFI/无线热点之后, 手机QQ能上浏览器不能上网

    这个完全是个人经验,绝对原创,请尊重博主原创权,转载请注明转于此博客. 问题如题,大家电脑创建无线热点之后, 有的人手机会出现QQ,微信能上网, 但是浏览器或者基于浏览器的那些比如应用商店不能上网, ...

  3. tensorflow 自定义损失函数示例

    这个自定义损失函数的背景:(一般回归用的损失函数是MSE, 但要看实际遇到的情况而有所改变) 我们现在想要做一个回归,来预估某个商品的销量,现在我们知道,一件商品的成本是1元,售价是10元. 如果我们 ...

  4. 解决EJB本地调用“java.lang.ClassCastException: $Proxy96 cannot be cast to com.tgb.ejb.UserManager”异常

    EJB本地调用方式:把Webclient和EJB服务端部署到同一个JBoss,client和server通过一个JVM进行通信. Web客户端本地调用时.需引用EJB服务端打包的jar,不需引用JBo ...

  5. poj 1087 A Plug for UNIX 【最大流】

    题目连接:http://poj.org/problem? id=1087 题意: n种插座 ,m个电器,f组(x,y)表示插座x能够替换插座y,问你最多能给几个电器充电. 解法:起点向插座建边,容量1 ...

  6. 使用Logstash来实时同步MySQL数据到ES

    上篇讲到了ES和Head插件的环境搭建和配置,也简单模拟了数据作测试 本篇我们来实战从MYSQL里直接同步数据 一.首先下载和你的ES对应的logstash版本,本篇我们使用的都是6.1.1 下载后使 ...

  7. 原生JS的Ajax

    转自:https://www.cnblogs.com/yufann/p/JS-Ajax.html 1.创建一个Ajax对象 非IE6浏览器:var obj = new XMLHttpReuqest() ...

  8. JavaScript定时器:setTimeout()和setInterval()

    1 超时调用setTimeout() 顾名思义,超时调用的意思就是在一段实际之后调用(在执行代码之前要等待多少毫秒) setTimeout()他可以接收两个参数: 1 要执行的代码或函数 2 毫秒(在 ...

  9. 通过 JS 判断页面是否有滚动条的简单方法

    前言 最近在写插件的过程中,需要使用 JS 判断是否有滚动条,搜了一下,大致方法都差不多,但都有些啰嗦,代码不够简洁.最终通过参考不同方法,写了一个比较简单的方法.在判断滚动条的同时也需要计算滚动条的 ...

  10. [数据结构]C语言二叉树的实现

    树和图是数据结构中比较麻烦的东西,里面涉及的概念比较多,也最有用, 就比如一般树广泛应用于人工智能的博弈上,而基于图的广度优先和深度优先搜索也广泛应用于人工智能寻路上面 首先我们要把树进行分类: &g ...