




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
机器学习的敲门砖:手把手教你TensorFlow初级入门本文章来自于阿里云云栖社区摘要:在开始使用机器学习算法之前,我们应该首先熟悉如何使用它们。 而本文就是通过对TensorFlow的一些基本特点的介绍,让你了解它是机器学习类库中的一个不错的选择。本文由北邮爱可可-爱生活老师推荐,阿里云云栖社区组织翻译。以下为译文:在开始使用机器学习算法之前,我们应该首先熟悉如何使用它们。而本文就是通过对TensorFlow的一些基本特点的介绍,让你了解它是机器学习类库中的一个不错的选择。让我们设想一下,当我们用Python写代码时,没有那些方便的类库会是怎样一种窘境。这就好比你有一个新的智能手机,而不安装任何应用程序。虽然它仍然可以打电话,发短信,但如果有了那些更方便的应用程序,这部智能手机才更有价值。设想一下这个场景.你作为一名业务负责人,需要负责跟踪销售流程。你希望计算销售产品的收入。现在有100个不同的产品在你的仓库中,你需要用一个向量表示每个产品的价格。另一个大小为100的向量表示每个产品的库存量。以下的Python代码是用来计算销售所有产品的收入。注意了,这里没有调用任何类库。revenue = 0for price, amount in zip(prices, amounts): revenue += price * amount代码列表1. 不使用任何Python类库计算两个向量的内积这段代码只是计算两个向量(也称为点积)的内积。想象一下,对于更复杂的问题,需要多少代码。例如求解线性方程或计算两个向量之间的距离。当你安装TensorFlow类库的同时,其中还包括了非常知名的NumPy类库,对Python编程中的数学操作非常有用。用Python编程时,不使用类库(例如NumPy和TensorFlow)就像使用没有自动对焦的相机:你虽然获得了更多的灵活性,但你可能很容易犯错。在机器学习的过程中已经很容易犯错误了,所以就让我们使用TensorFlow来提高化软件开发的效率吧。代码列表2展示了如何使用NumPy简洁地编写相同的内积运算。import numpy as nprevenue = np.dot(prices, amounts)代码列表2. 用NumPy类库计算内积Python是一种简洁的语言,这意味着你不会看到冗长的代码。另一方面,Python语言的简洁意味着许多处理都在后台进行,因此我们应该熟悉它背后的原理。关于TensorFlow的Python和C + API的各种函数的详细文档,请参见/api_docs/index.html。机器学习主要依赖于很多数学公式,本文将对使用TensorFlow进行这类数学运算做一个初步的介绍。通过示例和代码,大家可以对TensorFlow有一个初步了解。例如如何运用TensorFlow计算大数据的统计信息。因此本文的重点将完全是关于如何使用TensorFlow,而不是一般的机器学习算法运用。机器学习算法需要大量的数学运算。通常,某个算法可以归结为简单函数组合的迭代,直到它收敛为止。当然,也可以使用任何标准编程语言来执行这些计算。但是使用像TensorFlow这样已经非常完善了的类库是提高代码可控性和性能的关键。确保TensorFlow工作首先,为我们的第一段代码创建一个名为test.py的新文件。通过运行以下代码导入TensorFlow:import tensorflow as tf在导入TensorFlow后,如果Python解释器没有报错,那么我们就可以开始使用TensorFlow了。遇到了错误?在这里,常见错误的原因是你可能安装了GPU版本,并且类库无法搜索CUDA驱动程序。请记住,如果使用CUDA编译库,则需要使用CUDA的路径更新环境变量。你需要检查TensorFlow上的CUDA指令。(有关详情,请参阅/versions/master/get_started/os_setup.html#optional-linux-enable-gpu-support)。使用TensorFlow中的规则TensorFlow库通常使用tf限定名称来进行导入。一般来说,使用tf限定名称是一个不错的方法,以便与其他开发人员和开源TensorFlow项目保持一致。你也可以选择不使用这个限定名称,但这会影响你在自己的项目中重用别人的TensorFlow代码。表示张量在现实世界中描述对象的一个简便方法就是通过罗列出它的属性或特征。 例如,我们可以通过颜色,型号,发动机类型和里程数描述一辆汽车。 这些特征的有序列表被称为特征向量,这正是我们要在TensorFlow代码中所表示的。特征向量是机器学习中最有用的方法之一,(它们就是一个数字列表)。每个数据项通常有一个特征向量,而一个好的数据集则具有数千个特征向量。毫无疑问,你会经常一次处理多个向量。矩阵简明地表示了向量列表,其中矩阵的每列表示一个特征向量。在TensorFlow中用向量的向量表示矩阵,每个向量具有相同的长度。图1是一个两行三列的矩阵的示例,例如1,2,3,4,5,6。注意,这是一个包含两个元素的向量,每个元素对应一个矩阵行。图1.图上半部分是计算机对矩阵的表示,下半部分是我们日常生活中对矩阵的表示。这种形式的符号是大多数科学计算类库中的常见范例。我们通过指定其行和列索引来定位矩阵中的元素。例如,第一行和第一列来表示左上角第一个元素。有时,我们需要使用两个以上的索引,这样来表示一个元素会很方便。例如,在表示一个图片中的像素时,我们不仅通过其行和列值来描述它,而且还使用红,绿,蓝通道来对其进行描述。张量是通过任意数量的索引指定矩阵中元素的一般化。一个张量的例子.假设一所小学为每个学生分配座位。而你是这个学校的校长,并且你记不住这些学生的名字。幸运的是,每个教室都有一个座位网格,可以通过学生的行和列来指定某个学生。因为有多个教室,所以你不能简单的说“早上好,4排10列!”你还需要指定教室,比如说“你好,教室2的4排10列”。不像矩阵只需要两个索引就能指定一个元素,这所学校的学生需要三个数字。这三个数字都是三阶张量的一部分!张量是更多的嵌套向量。例如,一个232的张量为1,2,3,4,5,6,7,8,9,10 11,12,它可以被认为是两个矩阵,每个大小为32。因此,我们说这个张量的秩是3.一般来说,张量的秩是指定一个元素所需的索引的数量。TensorFlow中的机器学习算法是作用于张量上的,理解如何使用它们是关键。图2.该张量可以被认为是堆叠在彼此之上的多个矩阵。要指定其中的某个元素,必须指明行和列,以及要访问的矩阵。因此,该张量的秩为三。你可能会对如何表示张量产生疑惑。下面三行代码试图表示相同的22矩阵。该矩阵表示两个维度的两个特征向量。例如,它可以表示两个人对两部电影的评价。每个人,由矩阵的行索引表示,分配一个数字来描述每个人的电影评价值,由列索引表示。运行代码以了解如何在TensorFlow中生成矩阵。import tensorflow as tf# Well use NumPy matrices in TensorFlowimport numpy as np # Define a 2x2 matrix in 3 different waysm1 = 1.0, 2.0, 3.0, 4.0m2 = np.array(1.0, 2.0, 3.0, 4.0, dtype=np.float32)m3 = tf.constant(1.0, 2.0, 3.0, 4.0)# Print the type for each matrixprint(type(m1)print(type(m2)print(type(m3)# Create tensor objects out of the different typest1 = tf.convert_to_tensor(m1, dtype=tf.float32)t2 = tf.convert_to_tensor(m2, dtype=tf.float32)t3 = tf.convert_to_tensor(m3, dtype=tf.float32)# Notice that the types will be the same nowprint(type(t1)print(type(t2)print(type(t3)代码列表3.表示张量的不同方式第一个变量m1是一个列表,第二个变量m2是NumPy类库中的一个ndarray,最后一个变量m3是TensorFlow的Tensor对象。TensorFlow中所有运算符(如neg)都设计为对张量对象进行操作。tf.convert_to_tensor(.)这个方法,我们可以用在任何地方,以确保我们处理张量而不是其他类型。TensorFlow类库中的大多数方法都已经调用了它。使用tf.convert_to_tensor(.)并不是必须的,在这里使用它,是因为它有助于我们理解隐式类型的跨类库处理。让我们再来看看如何中定义张量。导入TensorFlow类库之后,我们可以使用常量运算符,如代码列表4所示。import tensorflow as tf# Define a 2x1 matrixmatrix1 = tf.constant(1., 2.)# Define a 1x2 matrixmatrix2 = tf.constant(1, 2)# Define a rank 3 tensormyTensor = tf.constant( 1,2, 3,4, 5,6, 7,8, 9,10, 11,12 )# Try printing the tensors print(matrix1)print(matrix2)print(myTensor)代码列表4。 创建张量代码4的运行结果:Tensor( “Const:0”, shape=TensorShape(Dimension(1), Dimension(2), dtype=float32 )Tensor( “Const_1:0”, shape=TensorShape(Dimension(2), Dimension(1), dtype=int32 )Tensor( “Const_2:0”, shape=TensorShape(Dimension(2), Dimension(3), Dimension(2), dtype=int32 )从运行结果中可以看出,每个张量都由已命名的Tensor对象表示。每个Tensor对象都有一个唯一的标签(名称),一个用于定义其结构的维度(shape),以及用于指定我们要操作的数据类型(dtype)。因为我们并没有显示指定名称,所以他们被自动命名为:“Const:0”,“Const_1:0”和“Const_2:0”。张量类型需要注意的是matrix1的每个元素以小数点结束,这是为了告诉Python该元素的数据类型不是整数,而是浮点数。我们可以传递显式dtype值。和NumPy数组一样,张量可以接受我们指定的类型。TensorFlow也提供了一些构造函数用于一些简单的张量。例如,tf.zeros(shape)创建了一个包涵所有值都被初始化为零的特定形态的张量。 类似地,tf.ones(shape)创建了一个所有元素值为1的张量。 shape参数是描述张量的维度的一维张量,它的类型是int32。创建运算符我们已经有了几个初始的张量,现在我们可以用运算符对他们进行操作,比如加减乘除。假设现在有一个矩阵,它的行表示货币交易,收款金额(正值)和收款金额(负值)。矩阵取反是表示某个人的货币流历史记录的一种方式。我们现在对代码列表4中的matrix1进行取反操作neg(negation的缩写)。矩阵取反将正数转换为绝对值相同的负数,反之亦然。取反操作是最简单的操作之一。如代码列表5所示,取反只需将一个张量作为输入,得出另一个张量,每个元素取反。现在,尝试自己运行代码。如果你已经掌握了如何使用取反,那就可以推广到所有其他TensorFlow的操作。这里需要指出,定义操作(如取反操作)和运行它是不一样的。import tensorflow as tf# Define an arbitrary tensorx = tf.constant(1, 2)# Negate the tensorneg_x = tf.neg(x)# Print the objectprint(neg_x)代码列表5.取反运算符的使用代码列表5的输出:Tensor(“Neg:0”, shape=(1, 2), dtype=int32)更多TensorFlow的运算符官方文档详细地列出了所有可用的数学操作:https://api_docs/Python/math_ops.html。常用操作符的示例包括:tf.add(x, y) Add two tensors of the same type, x + ytf.sub(x, y) Subtract tensors of the same type, x ytf.mul(x, y) Multiply two tensors element-wisetf.pow(x, y) Take the element-wise power of x to ytf.exp(x) Equivalent to pow(e, x), where e is Eulers number (2.718)tf.sqrt(x) Equivalent to pow(x, 0.5)tf.div(x, y) Take the element-wise division of x and ytf.truediv(x, y) Same as tf.div, except casts the arguments as a floattf.floordiv(x, y) Same as truediv, except rounds down the final answer into an integertf.mod(x, y) Takes the element-wise remainder from division我们可以这些TensorFlow运算符来产生高斯分布(也称为正态分布)。 参见图3提示。 你可以参考wiki,找到正态分布的概率密度:https://wiki/Normal_distribution。为了简洁起见,诸如“*”,“-”,“+”等大多数数学表达式是其TensorFlow运算符的快捷方式。高斯函数包括许多运算,如下所示:from math import pimean = 1.0sigma = 0.0(tf.exp(tf.neg(tf.pow(x mean, 2.0) / (2.0 * tf.pow(sigma, 2.0) ) *(1.0 / (sigma * tf.sqrt(2.0 * pi) )图3.该图表示产生高斯分布所需的操作。节点之间的链接表示数据如何从一个操作进入下一个操作。操作本身很简单,但是它们如何相互作用是相对复杂的。TensorFlow算法很容易可视化。它们可以用流程图来进行描述。流程图就是一种图表。流程图中的每个箭头都称为图形的边。而它的每个状态被称为节点。在会话中执行运算符会话(session)是描述代码应该如何运行的软件系统环境。在TensorFlow中,会话设置了硬件设备(如CPU和GPU)如何相互通信。这样,你只要关心如何设计机器学习算法,而不必担心底层硬件设备的运行。当然,你也可以配置会话以更改其底层硬件设备交互行为,而不更改上层代码。要在TensorFlow中运行程序计算数值是需要一个会话的。只有在已创建的会话才可以对Tensor对象进行赋值。为此,我们必须使用tf.Session()创建一个会话类,并由它来运行一个运算符(代码列表6)。import tensorflow as tf# Define an arbitrary matrixmatrix = tf.constant(1., 2.)# Run the negation operator on itneg_matrix = tf.neg(matrix)# Start a session to be able to run operationswith tf.Session() as sess: # Tell the session to evaluate negMatrix result = sess.run(neg_matrix)# Print the resulting matrixprint(result)代码列表6.使用会话恭喜!你刚刚写了第一个完整的TensorFlow代码。尽管它所做的是只是对一个矩阵进行取反,但它已经能充分体现TensorFlow中的核心概念与框架了。会话配置在创建tf.Session类时,我们可以向构造函数传递一些参数。 例如,TensorFlow会根据可用的内容自动确定为指定GPU或CPU设备的最佳方式。 在创建会话时,我们可以设置log_device_placements = True,如代码列表7所示。import tensorflow as tf# Define a matrix and negate itmatrix = tf.constant(1., 2.)negMatrix = tf.neg(matrix)# Start the session with a special config passed
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 摩擦学性能提升材料研究-洞察及研究
- 交互式医疗设备人机协作-洞察及研究
- 教育玩具店的口碑营销策略-洞察及研究
- 2025征兵工作试题及答案
- 2025空军试卷考试题及答案
- 祁连山冰川融水对下游河流水质的影响-洞察及研究
- 2025国企应聘笔试试题及答案
- 安全防范系统在智能楼宇中的应用探讨
- 借签劳动合同模板(3篇)
- 护考护理知识和技能题库及答案解析
- 新版机动车交通事故责任强制保险合同
- T-CTSS 3-2024 茶艺职业技能竞赛技术规程
- 品管圈PDCA案例-普外科提高甲状腺手术患者功能锻炼合格率
- 2022-2024年营养指导员考试真题及答案合集
- 《电工基础(第2版)》中职全套教学课件
- 2024-2025学年江苏省南通市海安市高二(上)月考物理试卷(10月份)(含答案)
- ISO9001-2015质量管理体系内审培训课件
- 初中物理晋升高级(一级)职称水平考试模拟试卷有答案解析共三套
- CJT 340-2016 绿化种植土壤
- 《无线电失效程序》课件
- 泸州市专业技术人员年度考核登记表
评论
0/150
提交评论