目录
3.2.4Tensorflow框架
1、背景
2015年10月5日,谷歌为TensorFlow提交了注册商标申请(登记编号:86778464),并这样描述它:
(1)用以编写程序的计算机软件;
(2)计算机软件开发工具;
(3)可应用于人工智能、深度学习、高性能计算、分布式计算、虚拟化和机器学习这些领域;
(4)软件库可应用于通用目的的计算、数据收集的操作、数据变换、输入输出、通信、图像显示、人工智能等领域的建模和测试;
(5)软件可用作应用于人工智能等领域的应用程序接口(API)。
2015年11月9日,Google宣布对Tensorflow开源。一时间,Tensorflow在GitHub上面的下载量跃升至全站第2位,可见全世界兴趣爱好者对这款开源软件的热情。现如今许多知名的IT企业,如Google、Facebook、Microsoft、Apple甚至国内的百度,无不在机器学习研究领域给予非常大的资金和人力的投入;但是,鲜有将内部使用的平台公之于众的。当然,虽然不认为Google这次的做法完全是一次“慈善捐助”,但是不管怎样这样的举措的确令人拍手叫好。
备注:Google在其将近20年的发展历程中,不乏这种“战略性”的论文发表甚至代码开源,从而对整个IT领域产生革命性影响的例子。其中包括:发表MapReduce这种分布式存储和计算框架的介绍论文,从而产生了Hadoop、Spark等;开源Android手机操作系统,几年之间雄霸移动端操作系统市场,与苹果公司的iOS一较高下,不知道这次公开Tensorflow这个曾在Google内部作为机器学习的系统框架,是否也意味着Google正在为今后的人工智能革命进行战略布局。换言之,如果有更多的数据科学家开始使用Tensorflow来从事机器学习方面的研究,冒昧预测,这将有利于Google对日益发展的机器学习行业拥有更多的主导权。
2、编程实践一
许多人开始以为Tensorflow只是一个用于深入学习研究的系统,其实不然。应该说,这是一个完整的编码框架。就如同按照Python编程语法设计程序一样,Tensorflow内部也有自己所定义的常量、变量、数据操作等要素。不同的是,Tensorflow使用图(Graph)来表示计算任务;并使用会话(Session)来执行图。
(1)输出一句话
使用显式会话输出一句话。
# 代码73:使用Tensorflow输出一句话
# 导入tensorflow工具包并重命名为tf。
import tensorflow as tf
# 导入numpy并重命名为np。
import numpy as np
# 初始化一个Tensorflow的常量:Hello Google Tensorflow!字符串,并命名为greeting作为一个计算模块。
greeting = tf.constant('Hello Google Tensorflow!')
# 启动一个会话。
sess = tf.Session()
# 使用会话执行greeting计算模块。
result = sess.run(greeting)
# 输出会话执行的结果。
print(result)
# 关闭会话,这是一种显式关闭会话的方式。
sess.close()
本地输出:
b'Hello Google Tensorflow!'
(2)线性函数的计算
Tensorflow像搭积木一样将各个不同的计算模块拼接成流程图,完成一次线性函数的计算,并在一个隐式会话中执行。
# 代码74:使用Tensorflow完成一次线性函数的计算
# 声明matrix1为Tensorflow的一个1*2的行向量。
matrix1 = tf.constant([[3., 3.]])
# 声明matrix2为Tensorflow的一个2*1的列向量。
matrix2 = tf.constant([[2.], [2.]])
# product将上述两个算子相乘,作为新算例。
product = tf.matmul(matrix1, matrix2)
# 继续将product与一个标量2.0求和拼接,作为最终的linear算例。
linear = tf.add(product, tf.constant(2.0))
# 直接在会话中执行linear算例,相当于将上面所有的单独算例拼接成流程图来执行。
with tf.Session() as sess:
result = sess.run(linear)
print(result)
本地输出:
[[14.]]
(3)“良/恶性乳腺癌肿瘤”预测
尽管上面的代码可以说明Tensorflow是一个编程框架,但是截至目前还没有显示出其机器学习的能力。那么接下来利用Tensorflow自行搭建一个线性分类器,重新对“良/恶性乳腺癌肿瘤”从事预测。与直接使用Scikit-learn中已经编写好的LogisticRegression模型不同,Tensorflow允许使用者自由选取不同操作,并组织一个学习系统。这里对所要使用的线性分类器做一个简化:取0.5(良性肿瘤为0,恶性肿瘤为1)为界,并采用最小二乘法拟合模型参数。
# 代码75:使用Tensorflow自定义一个线性分类器用于对“良/恶性乳腺癌肿瘤”进行预测
# 导入tensorflow。
import tensorflow as tf
# 导入numpy。