前言

随着AI算法不断发展,对应的应用领域也越来越广泛,比如自动驾驶、语音机器人等技术已经越来越贴近人们的生活。但是AI庞大的算法体系让工程师们望而却步,不知道该如何使用这些算法来解决工程中的实际问题,所以市面上诞生了很多优秀的开源框架,本文介绍的TensorFlow就是其中一款最广为人知的工具集合,文章将从TensorFlow的安装和其在神经网络中的简单使用这两个大方面展开。

TensorFlow的基本概念

TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)表示在节点间相互联系的多维数据数组,即张量(tensor)。它灵活的架构使得可以在多种平台上展开计算,例如台式计算机中的一个或多个CPU(或GPU)、服务器、移动设备等。

TensorFlow 最初由Google大脑小组(隶属于Google机器智能研究机构)的研究员和工程师们开发出来,用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其也可广泛用于其他计算领域。

TensorFlow的安装

1.操作系统的选择与安装

TensorFlow支持几乎所有的主流操作系统,Ubuntu,CentOS,MacOS等是最常用的选择,但Android和iOS也在其支持之列。本文将选择最常用的Linux开发版——Ubuntu作为安装环境。

首先,在滴滴云上申请一个云服务器,操作系统选择Ubuntu16.04,配置CPU 2核、内存 4G(可以按照自己的实际需求配置),也可以选择GPU,因为TensorFlow本身支持各种架构的计算,可以在代码中动态选择运行在CPU上还是在GPU上面。一旦选择完配置,点击创建就会快速生成云服务器。

2.Python环境及TensorFlow的安装

TensorFlow 目前已经支持使用多种接口进行调用,但是Python目前在人工智能领域使用得越来越广泛,不仅TensorFlow,很多机器学习的算法首选使用Python进行描述,目前可以选择Python2.x或者3.x,而本次使用的滴滴云服务器安装的Ubuntu默认已经安装了2.x的环境,可以用以下语句来检测:

dc2-user@10-254-187-7:~$ python --version
Python 2.7.12

以上表明安装了2.7.12的版本,是符合TensorFlow要求的一个版本。

但是只安装Python还不能达到最小环境需求,因为Python的许多功能是以库的形式存在的,例如TensorFlow本身就是一个库,另外还需要NumPy。如果一个个通过源码安装比较麻烦,一般使用Python的库管理器:pip来进行安装和管理所有的Python库。

滴滴云的Ubuntu中已经预置了pip,所以无需安装就直接可以使用。

dc2-user@10-254-187-7:~$ sudo pip install numpy
...
...
Installing collected packages: numpy
Successfully installed numpy

当出现上述Successfully installed时就表明numpy已经安装成功,下面用同样的方法可以安装TensorFlow的Python库:

dc2-user@10-254-187-7:~$ sudo pip install -i http://pypi.mirrors.ustc.edu.cn/simple/ --trusted-host pypi.mirrors.ustc.edu.cn tensorflow
...
...
Successfully installed absl-py-0.5.0 astor-0.7.1 backports.weakref-1.0.post1 enum34-1.1.6 funcsigs-1.0.2 futures-3.2.0 gast-0.2.0 grpcio-1.15.0 h5py-2.8.0 keras-applications-1.0.6 keras-preprocessing-1.0.5 markdown-3.0.1 mock-2.0.0 pbr-4.3.0 protobuf-3.6.1 tensorboard-1.11.0 tensorflow-1.11.0 termcolor-1.1.0 werkzeug-0.14.1

如果出现红色的错误可以运行以下命令来解决:

dc2-user@10-254-187-7:~$ sudo pip install --upgrade pip

当出现上面的成功回显时就表明TensorFlow的安装包已经安装完毕,可以使用了。

接下去输入以下命令进入Python环境进行验证:

dc2-user@10-254-187-7:~$ python
Python 2.7.12 (default, Dec  4 2017, 14:50:18)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
2018-10-29 18:51:46.520277: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled touse: AVX2 FMA
>>> print(sess.run(hello))
Hello, TensorFlow!

出现上面的代码运行结果就表明已经在滴滴云服务器上运行了TensorFlow版本的"hello,world"程序。

3. TensorFlow在神经网络中的简单应用

神经网络作为机器学习的前延技术,这些年来广泛地出现在各种机器学习的应用中,而TensorFlow中较好地封装了一些最常用的算法,所以使用TensorFlow可以高效地组织算法,快速地训练出想要的模型。

在使用神经网络解决实际的分类或者回归问题时需要更好地设置参数取值。使用监督学习的方式设置神经网络参数需要有一个标注好的训练数据集。以判断零件是否合格为例,这个标注好的训练数据集就是收集的一批合格零件和一批不合格零件。

监督学习最重要的思想就是,在已知答案的标注数据集上,模型给出的预测结果要尽量接近真实的答案。通过调整神经网络中的参数对训练数据进行拟合,可以使得模型对未知的样本提供预测的能力。

在神经网络优化算法中, 最常用的方法是反向传播算法(backpropagation)。下图展示了使用反向传播算法训练神经网络的流程图,本文将不过多讲解反向传播的数学公式,而是重点介绍如何通过TensorFlow 实现反向传播的过程。

Created with Raphaël 2.2.0Start初始化变量训练次数=0选取一部分训练数据通过前向传播获取预测值通过前向传播获更新变量达到训练目标?训练结束达到训练次数?训练次数+1yesnoyesno

从上图可以看出,通过反向传播算法优化神经网络是一个迭代的过程。在每次迭代的开始,首先需要选取一小部分训练数据,这一小部分数据叫做一个batch。然后,这个batch 的样例会通过前向传播算法得到神经网络模型的预测结果。因为训练数据都是有正确答案标注的,所以可以计算出当前神经网络模型的预测答案与正确答案之间的差距。

最后,基于这预测值和真实值之间的差距,反向传播算法会相应更新神经网络参数的取值,使得在这个batch 上神经网络模型的预测结果和真实答案更加接近。通过TensorFlow 实现反向传播算法的第一步是使用TensorFlow 表达一个batch 的数据。在上面的样例中使用了常量来表达过一个样例:

x=tf.constant([[0.7, 0.9]])

但如果每轮迭代中选取的数据都要通过常量来表示,那么TensorFlow的计算图将会太大。因为每生成一个常量,TensorFlow 都会在计算图增加一个节点。一般来说,一个神经网络的训练过程会需要经过几百万轮甚至几亿轮的迭代,这样计算图就会非常大,而且利用率很低。为了避免这个问题,TensorFlow 提供了placeholder 机制用于提供输入数据。placeholder 相当于定义了一个位置,这个位置中的数据在程序运行时再指定。

这样,在程序中就不需要生成大量常量来提供输入数据,而只需要将数据通过placeholder 传入TensorFlow 计算图。在placeholder 定义时,这个位置上的数据类型是需要指定的。和其他张量一样,placeholder 的类型也是不可以改变的。

placeholder 中数据的维度信息可以根据提供的数据推导得出,所以不一定要给出。下面给出了通过placeholder 实现前向传播算法的代码:

x = tf.placeholder(tf.float32, shape=(1, 2), name="input")
print(sess.run(y, feed_dict={x: [[0.7,0.9]]}))

在调用sess.run 时,需要使用feed_dict 来设定x 的取值。在得到一个batch 的前向传播结果之后,需要定义一个损失函数来刻画当前的预测值和真实答案之间的差距。然后通过反向传播算法来调整神经网络参数的取值使得差距可以被缩小。

损失函数将在后面的文章中更加详细地介绍。以下代码定义了一个简单的损失函数,并通过TensorFlow 定义了反向传播的算法:

#定义损失函数来刻画预测值与真实值的差距
cross_entropy = -tf.reduce_mean(
y_ * tf.log(tf.clip_by_value(y, 1e-10, 1.0)))
# 定义学习率。
learning_rate = 0.001
# 定义反向传播算法来优化神经网络中的参数。
train_step =
tf.train.AdamOptimizer(learning_rate).minimize(cross_entropy)

在上面的代码中,cross_entropy 定义了真实值和预测值之间的交叉熵(cross entropy),这是分类问题中一个常用的损失函数。第二行train_step 定义了反向传播的优化方法。

目前TensorFlow 支持10 种不同的优化器,读者可以根据具体的应用选择不同的优化算法。比较常用的优化方法有三种:tf.train.GradientDescentOptimizer、class tf.train.AdamOptimizer和tf.train.MomentumOptimizer。

4.总结
人工智能的飞速发展给科技界带来了新的气象,TensorFlow等机器学习框架给我们带来了新的学习和应用AI的途径,本文讲述了如何在一个全新的滴滴云服务器上一步步搭建Python和TensorFlow,并使用TensorFlow实现了一个简单的神经网络反向传播算法。

基于滴滴云虚拟机的TensorFlow搭建与使用相关推荐

  1. 基于滴滴云服务器搭建 Consul 集群

    前言 Consul 是什么 Consul 是用 Go 开发的分布式服务协调管理的工具,它提供了服务发现,健康检查,Key/Value 存储等功能,并且支持跨数据中心的功能. Consul 基本概念 A ...

  2. 基于滴滴云搭建微信小程序

    微信小程序自 2017 年推出以来,以其轻量级级特性,为传统移动互联网格局带来了极大的震动.相对于传统 APP,小程序无需下载,即扫即用,用完即走,极大的节省了手机的空间,提高了用户使用的便利性. 本 ...

  3. 基于滴滴云搭 SeaweedFS 存储系统

    简介 SeaweedFS 是一个简单的.高扩展性的分布式文件系统,是 Fb 的 Haystack 开源版本,相对于传统的分布式文件系统,它在应对小对象存储场景中具有巨大的优势. SeaweedFS 中 ...

  4. 基于滴滴云的棋牌游戏服务端架构设计

    现在小团队开发的棋牌游戏有很多,棋牌行业的相互攻击是非常普遍的现象,同行之间往往会采取 DDOS.CC 等攻击的手段来打击对手,这是目前棋牌运营商们面临的比较严峻的一个问题,那么在设计棋牌游戏服务端架 ...

  5. 基于滴滴云主机搭建 FTP 文件共享服务器(一)

    FTP 简单介绍 什么是 FTP 服务器? FTP 服务器(File Transfer Protocol Server)是在互联网上提供文件共享存储和访问服务的计算机,它们依照 FTP 协议提供服务. ...

  6. 基于滴滴云搭建安全稳定的 Memcached 服务器

    介绍 Memcached 是一种内存 cache 系统,通过将一些高频使用和最近经常访问的信息储存在内存中,可以明显地优化访问后端数据库的性能. 直观上来看,借助于 Memcached 组件,可以大量 ...

  7. 基于滴滴云安装 Docker 并上传镜像到滴滴云 Docker 仓库

    前言 Docker 简化了容器中应用程序进程的管理过程.容器允许您在资源隔离的进程中运行应用程序.容器与虚拟机类似,但容器更便携.更资源友好,并且更依赖于主机操作系统. 本文将介绍如何用滴滴云服务器在 ...

  8. 滴滴云服务器快速配置搭建滴滴云GPU云服务器搭建深度学习环境

    滴滴云GPU云服务器搭建深度学习环境 1.创建云服务器 1.1注册滴滴云 首先注册滴滴云,并进行实名认证,否则无法创建云服务器.点击"控制台",进入控制台页面. 1.2选择配置 点 ...

  9. 校园表白墙微信小程序V1.0 SayLove -基于微信云开发-一键快速搭建,开箱即用

    项目最新更新介绍请看这里:https://www.cnblogs.com/LiangSenCheng/p/13040899.html 发现有问题?欢迎加我微信一起探讨,或者直接提Issues 无法下载 ...

最新文章

  1. ffmpeg 快速定位帧-资料整理
  2. 理解统计信息(6/6):统计信息汇总贴
  3. python编程游戏手机版_利用Python开发手机同款游戏:开心消消乐
  4. simulink显示多个数据_如何在 Simulink 中使用 PID Tuner 进行 PID 调参?
  5. 最大子数组下标java,【算法】最大子数组
  6. python自动化学习之语法学习(判断语句和循环语句)
  7. 小米路由器青春版刷Padavan固件
  8. 编码器类型原理知识汇总(增量式/绝对式/绝对值)
  9. 3.OpenCV可视化(Viz)——单目相机标定模拟
  10. imp导入时 出现IMP-00017:由于 ORACLE 错误 6550, 以下语句失败: 解决方法
  11. js实现返回上一页(页面刷新与不刷新)
  12. 全栈开发实战|​名片管理系统的设计与实现(SSM + JSP)
  13. (转)安装SQL Server:以前某个程序安装时挂起了文件操作,安装程序前请重启
  14. [文档] 软件测试报告
  15. MAC的GIF动图录屏软件LICECAP
  16. 如何正确的查看TongWeb日志?
  17. Node.js学习之网络爬虫(使用cheerio抓取网页数据)
  18. Parser Generator 2 过往资料
  19. Java登录QQ邮箱整理邮件的58的简历(一)
  20. 两台笔记本 共享上网

热门文章

  1. emacs 使用笔记
  2. 图像处理:图像读写基本操作
  3. 获取windows硬件、软件信息的方法
  4. python之seed()函数
  5. linux fat32 乱码,FAT32文件系统乱码的研究和分析
  6. 以窗口形式进行数字图像处理时,在图像边界处对超出图像边界的窗口内容的映射(对称)处理
  7. Recurrent Filter Learning for Visual Tracking(RFL)论文笔记
  8. 导弹发射-河南省第九届省赛D题
  9. 富文本粘贴word文档内容图片处理
  10. Python画樱花树