前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Tensorflow从入门到精通(二):附代码实战

Tensorflow从入门到精通(二):附代码实战

作者头像
磐创AI
发布于 2018-04-24 10:05:21
发布于 2018-04-24 10:05:21
1.1K0
举报

1.Tensor介绍

Tensor(张量)是Tensorflow中最重要的数据结构,用来表示Tensorflow程序中的所有数据。Tensor本是广泛应用在物理、数学领域中的一个物理量。那么在Tensorflow中该如何理解Tensor的概念呢?

实际上,我们可以把Tensor理解成N维矩阵(N维数组)。其中零维张量表示的是一个标量,也就是一个数;一维张量表示的是一个向量,也可以看作是一个一维数组;二维张量表示的是一个矩阵;同理,N维张量也就是N维矩阵。

在计算图模型中,操作间所传递的数据都可以看做是Tensor。那Tensor的结构到底是怎样的呢?我们可以通过程序1-1更深入的了解一下Tensor。

程序1-1:

#导入tensorflow模块

import tensorflow as tf

a = tf.constant([[2.0,3.0]] ,name="a")

b = tf.constant([[1.0],[4.0]] ,name="b")

result = tf.matmul(a,b,name="mul")

print(result)

>> Tensor("mul_3:0", shape=(1, 1), dtype=float32)

程序1-1的输出结果表明:构建图的运算过程输出的结果是一个Tensor,且其主要由三个属性构成:Name、Shape和Type。Name代表的是张量的名字,也是张量的唯一标识符,我们可以在每个op上添加name属性来对节点进行命名,Name的值表示的是该张量来自于第几个输出结果(编号从0开始),上例中的“mul_3:0”说明是第一个结果的输出。Shape代表的是张量的维度,上例中shape的输出结果(1,1)说明该张量result是一个二维数组,且每个维度数组的长度是1。最后一个属性表示的是张量的类型,每个张量都会有唯一的类型,常见的张量类型如图1-1所示。

图1-1 常用的张量类型

我们需要注意的是要保证参与运算的张量类型相一致,否则会出现类型不匹配的错误。如程序1-2所示,当参与运算的张量类型不同时,Tensorflow会报类型不匹配的错误:

程序1-2:

import tensorflow as tf

m1 = tf.constant([5,1])

m2 = tf.constant([2.0,4.0])

result = tf.add(m1,m2)

TypeError: Input 'y' of 'Add' Op has type float32 that does not match type int32 of argument 'x'.

正如程序的报错所示:m1是int32的数据类型,而m2是float32的数据类型,两者的数据类型不匹配,所以发生了错误。所以我们在实际编程时,一定注意参与运算的张量数据类型要相同。

2 常量、变量及占位符

Tensorflow中对常量的初始化,不管是对数值、向量还是对矩阵的初始化,都是通过调用constant()函数实现的。因为constant()函数在Tensorflow中的使用非常频繁,经常被用于构建图模型中常量的定义,所以接下来,我们通过程序1-3了解一下constant()的相关属性:程序2-1:

import tensorflow as tf

a = tf.constant([2.0,3.0],name="a",shape=(2,0),dtype="float64",verify_shape="true")

print(a)

>> Tensor("a_11:0", shape=(2, 0), dtype=float64)

如程序2-1所示,函数constant有五个参数,分别为value,name,dtype,shape和verify_shape。其中value为必选参数,其它均为可选参数。Value为常量的具体值,可以是一个数字,一维向量或是多维矩阵。Name是常量的名字,用于区别其它常量。Dtype是常量的类型,具体类型可参见图2-2。Shape是指常量的维度,我们可以自行定义常量的维度。

verify_shape是验证shape是否正确,默认值为关闭状态(False)。也就是说当该参数true状态时,就会检测我们所写的参数shape是否与value的真实shape一致,若不一致就会报TypeError错误。如:上例中的实际shape为(2,0),若我们将参数中的shape属性改为(2,1),程序就会报如下错误:

TypeError: Expected Tensor's shape: (2, 1), got (2,).

Tensorflow还提供了一些常见常量的初始化,如:tf.zeros、tf.ones、tf.fill、tf.linspace、tf.range等,均可以快速初始化一些常量。例如:我们想要快速初始化N维全0的矩阵,我们可以利用tf.zeros进行初始化,如程序1-4所示:

程序2-2:

import tensorflow as tf

a=tf.zeros([2,2],tf.float32)

b=tf.zeros_like(a,optimize=True)

with tf.Session() as sess:

print(sess.run(a))

print(sess.run(b))

>> [[ 0. 0.]

[ 0. 0.]]

[[ 0. 0.]

[ 0. 0.]]

程序2-2向我们展示了tf.zeros和tf.zeros_like的用法。其它常见常量的具体初始化用法可以参考Tensorflow官方手册:https://www.tensorflow.org/api_guides/python/constant_op

此外,Tensorflow还可以生成一些随机的张量,方便快速初始化一些随机值。如:tf.random_normal()、tf.truncated_normal()、tf.random_uniform()、tf.random_shuffle()等。如程序1-5所示,我们以tf.random_normal()为例,来看一下随机张量的具体用法:

程序2-3:

import tensorflow as tf

random_num=tf.random_normal([2, 3], mean=-1, stddev=4,

dtype=tf.float32,seed=None,name='rnum')

with tf.Session() as sess:

print(sess.run(random_num))

>> [[-2.71897316 1.04246855 -3.12996817]

[-1.34851456 -0.13599336 4.60532522]]

随机张量random_normal()有shape、mean、stddev、dtype、seed、name六个属性。shape是指张量的形状,如上述程序是生成一个2行3列的tensor;mean是指正态分布的均值;stddev是指正太分布的标准差;dtype是指生成tensor的数据类型;seed是分发创建的一个随机种子;而name是给生成的随机张量命名。

Tensorflow中的其它随机张量的具体使用方法和属性介绍,可以参见Tensorflow官方手册:https://www.tensorflow.org/api_guides/python/constant_op。这里将不在一一赘述。

除了常量constant(),变量variable()也是在Tensorflow中经常会被用到的函数。变量的作用是保存和更新参数。执行图模型时,一定要对变量进行初始化,经过初始化后的变量才能拿来使用。变量的使用包括创建、初始化、保存、加载等操作。首先,我们通过程序2-4了解一下变量是如何被创建的:

程序2-4:

import tensorflow as tf

A = tf.Variable(3, name="number")

B = tf.Variable([1,3], name="vector")

C = tf.Variable([[0,1],[2,3]], name="matrix")

D = tf.Variable(tf.zeros([100]), name="zero")

E = tf.Variable(tf.random_normal([2,3], mean=1, stddev=2, dtype=tf.float32))

程序2-4展示了创建变量的多种方式。我们可以把函数variable()理解为构造函数,构造函数的使用需要初始值,而这个初始值是一个任何形状、类型的Tensor。也就是说,我们

既可以通过创建数字变量、一维向量、二维矩阵初始化Tensor,也可以使用常量或是随机常量初始化Tensor,来完成变量的创建。

当我们完成了变量的创建,接下来,我们要对变量进行初始化。变量在使用前一定要进行初始化,且变量的初始化必须在模型的其它操作运行之前完成。通常,变量的初始化有三种方式,如程序2-5所示:

程序2-5:

#初始化全部变量:

init = tf.global_variables_initializer()

with tf.Session() as sess:

sess.run(init)

#初始化变量的子集:

init_subset=tf.variables_initializer([b,c], name="init_subset")

with tf.Session() as sess:

sess.run(init_subset)

#初始化单个变量:

init_var = tf.Variable(tf.zeros([2,5]))

with tf.Session() as sess:

sess.run(init_var.initializer)

程序2-5说明了初始化变量的三种方式:初始化全部变量、初始化变量的子集以及初始化单个变量。首先,global_variables_initializer()方法是不管全局有多少个变量,全部进行初始化,是最简单也是最常用的一种方式;variables_initializer()是初始化变量的子集,相比于全部初始化化的方式更加节约内存;Variable()是初始化单个变量,函数的参数便是要初始化的变量内容。通过上述的三种方式,我们便可以实现变量的初始化,放心的使用变量了。

我们经常在训练模型后,希望保存训练的结果,以便下次再使用或是方便日后查看,这时就用到了Tensorflow变量的保存。变量的保存是通过tf.train.Saver()方法创建一个Saver管理器,来保存计算图模型中的所有变量。具体代码如程序2-6所示:

程序2-6:

import tensorflow as tf

var1 = tf.Variable([1,3], name="v1")

var2 = tf.Variable([2,4], name="v2")

#对全部变量进行初始化

init = tf.initialize_all_variables()

#调用Saver()存储器方法

saver = tf.train.Saver()

#执行图模型

with tf.Session() as sess:

sess.run(init)

#设置存储路径

save_path = saver.save(sess,"test/save.ckpt")

我们要注意,我们的存储文件save.ckpt是一个二进制文件,Saver存储器提供了向该二进制文件保存变量和恢复变量的方法。保存变量的方法就是程序中的save()方法,保存的内容是从变量名到tensor值的映射关系。完成该存储操作后,会在对应目录下生成如图2-1所示的文件:

图2-1 保存变量生成的相应文件

Saver提供了一个内置的计数器自动为checkpoint文件编号。这就支持训练模型在任意步骤多次保存。此外,还可以通过global_step参数自行对保存文件进行编号,例如:global_step=2,则保存变量的文件夹为model.ckpt-2。

那如何才能恢复变量呢?首先,我们要知道一定要用和保存变量相同的Saver对象来恢复变量。其次,不需要事先对变量进行初始化。具体代码如程序2-7所示:

程序2-7:

import tensorflow as tf

var1 = tf.Variable([0,0], name="v1")

var2 = tf.Variable([0,0], name="v2")

saver = tf.train.Saver()

module_file = tf.train.latest_checkpoint('test/')

with tf.Session() as sess:

saver.restore(sess,module_file)

print("Model restored.")

本程序示例中,我们要注意:变量的获取是通过restore()方法,该方法有两个参数,分别是session和获取变量文件的位置。我们还可以通过latest_checkpoint()方法,获取到该目录下最近一次保存的模型。

以上就是对变量创建、初始化、保存、加载等操作的介绍。此外,还有一些与变量相关的重要函数,如:eval()等。

认识了常量和变量,Tensorflow中还有一个非常重要的常用函数——placeholder。placeholder是一个数据初始化的容器,它与变量最大的不同在于placeholder定义的是一个模板,这样我们就可以session运行阶段,利用feed_dict的字典结构给placeholder填充具体的内容,而无需每次都提前定义好变量的值,大大提高了代码的利用率。Placeholder的具体用法如程序2-8所示:

程序序2-8:

import tensorflow as tf

a = tf.placeholder(tf.float32,shape=[2],name=None)

b = tf.constant([6,4],tf.float32)

c = tf.add(a,b)

with tf.Session() as sess:

print(sess.run(c,feed_dict={a:[10,10]}))

程序2-8演示了placeholder占位符的使用过程。Placeholder()方法有dtype,shape和name三个参数构成。dtype是必填参数,代表传入value的数据类型;shape是选填参数,代表传入value的维度;name也是选填参数,代表传入value的名字。我们可以把这三个参数看作为形参,在使用时传入具体的常量值。这也是placeholder不同于常量的地方,它不可以直接拿来使用,而是需要用户传递常数值。

最后,Tensorflow中还有一个重要的概念——fetch。Fetch的含义是指可以在一个会话中同时运行多个op。这就方便我们在实际的建模过程中,输出一些中间的op,取回多个tensor。Fetch的具体用法如程序2-9所示:

程序2-9:

import tensorflow as tf

a = tf.constant(5)

b = tf.constant(6)

c = tf.constant(4)

add = tf.add(b, c)

mul = tf.multiply(a, add)

with tf.Session() as sess:

result = sess.run([mul, add])

print(result)

>> [50,10]

程序2-10展示了fetch的用法,即我们利用session的run()方法同时取回多个tensor值,方便我们查看运行过程中每一步op的输出结果。

程序2-10:

import tensorflow as tf

var1 = tf.Variable([0,0], name="v1")

var2 = tf.Variable([0,0], name="v2")

Saver = tf.train.Saver()

module_file = tf.train.latest_checkpoint('test/')

with tf.Session() as sess:

saver.restore(sess,module_file)

print("Model restored.")

小结:本节旨在让大家学会Tensorflow的基础知识,为后边实战的章节打下基础。主要介绍了Tensor的概念,以及Tensorflow中的常量、变量、占位符、feed等知识点。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-03-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 磐创AI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
TensorFlow基础知识
x1、x2 表示输入,w1、w2 分别是 x1 到 y 和 x2 到 y 的权重,y=x1w1+x2w2。
foochane
2019/10/14
7530
TensorFlow基础知识
TF入门02-TensorFlow Ops
我们首先介绍一下TensorBoard的使用,然后介绍TensorFlow的基本ops,之后介绍张量的数据类型,最后介绍一下如何将自己的输入导入模型。
公众号-不为谁写的歌
2020/07/23
1.6K0
TensorFlow基础
TensorFlow 使用图来表示计算任务. 图中的节点被称之为 op (operation 的缩写). 一个 op 获得 0 个或多个 Tensor, 执行计算, 产生 0 个或多个 Tensor. 每个 Tensor 是一个类型化的多维数组. 例如, 你可以将一小组图像集表示为一个四维浮点数数组, 这四个维度分别是 [batch, height, width, channels].
百川AI
2021/10/19
6850
斯坦福深度学习课程第六弹:一起来学Tensorflow part1
翻译:穆文&韩小阳 校对:寒小阳 & 龙心尘 导 读 之前的课程里介绍了自然语言处理当中的一些问题,以及设计出来的一些相应的算法。research的东西还是落地到工程应用上比较有价值,之前也手撸过一些toy project,不过这些实现要用在工程中,总是有那么些虚的,毕竟稳定性和效率未必能够保证。所幸的是,深度学习热度持续升温的大环境下,各种大神和各家大厂也陆续造福民众,开源了一些深度学习框架,在这些开源框架的基础上去搭建和实现自己想要的深度学习网络结构就简单和稳定得多了。 有时候选择多了也是麻烦,对框架
大数据文摘
2018/05/22
6490
tf.Variable()函数
tf.Variable(initializer,name),参数initializer是初始化参数,name是可自定义的变量名称,用法如下:
周小董
2019/03/25
10.1K0
TensorFlow 入门
---- CS224d-Day 2: 在 Day 1 里,先了解了一下 NLP 和 DP 的主要概念,对它们有了一个大体的印象,用向量去表示研究对象,用神经网络去学习,用 TensorFlow 去训练模型,基本的模型和算法包括 word2vec,softmax,RNN,LSTM,GRU,CNN,大型数据的 seq2seq,还有未来比较火热的研究方向 DMN,还有模型的调优。 今天先不直接进入理论学习,而是先学习一下 TensorFlow,在原课程里,这部分在第7讲,但是我觉得最高效地学习算法的方式,就是一边
杨熹
2018/04/02
1.5K0
TensorFlow 入门
OpenCV+TensorFlow 人工智能图像处理 (1)
OpenCV是一个开源的计算机视觉库,OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
YingJoy_
2018/09/14
3.5K0
OpenCV+TensorFlow 人工智能图像处理  (1)
TensorFlow从0到1 - 2 - TensorFlow核心编程
上一篇Hello, TensorFlow!中的代码还未解释,本篇介绍TensorFlow核心编程的几个基本概念后,那些Python代码就很容易理解了。 与TensorFlow核心(Core)相对的是T
袁承兴
2018/04/11
8030
TensorFlow从0到1 - 2 - TensorFlow核心编程
基于TensorFlow的深度学习系列教程 2——常量Constant
在tensorflow中,数据分为几种类型: 常量Constant、变量Variable、占位符Placeholder。其中:
用户1154259
2019/07/02
7400
Tensorflow快速入门
作者:叶 虎 编辑:李文臣 PART 01 Tensorflow简介 引言 实践深度学习肯定要至少学习并掌握一个深度学习框架。这里我们介绍一个最流行的深度学习框架:Tensorflow。Tensorf
机器学习算法工程师
2018/03/06
1.1K0
Tensorflow快速入门
TensorFlow极简入门教程
随着 TensorFlow 在研究及产品中的应用日益广泛,很多开发者及研究者都希望能深入学习这一深度学习框架。本文介绍了TensorFlow 基础,包括静态计算图、张量、TensorBoard 可视化和模型参数的保存等。
刘盼
2018/07/26
1.6K1
TensorFlow极简入门教程
TensorFlow修炼之道(3)——计算图和会话(Graph&Session)
在计算图中,节点表示计算单位,边表示计算用到和产生的数据。 例如,在TensorFlow图中,tf.matmul操作将对应于具有两个输入边(要乘以的矩阵)和一个输出边(乘法的结果)的单个节点。
abs_zero
2018/04/11
1.7K0
深度学习入门实战(二):用TensorFlow训练线性回归
该文章介绍了如何通过Python和Keras框架实现一个简单的深度学习模型,并使用该模型对MNIST数据集进行分类。首先,介绍了Keras是什么以及它的主要特点,然后详细讲解了如何利用Keras实现一个简单的深度学习模型。最后,通过实例演示了如何使用该模型对MNIST数据集进行分类。
serena
2017/04/19
7.9K2
开刷Cs20之Tensorflow第二弹
本节学习来源斯坦福大学cs20课程,有关自学与组队学习笔记,将会放于github仓库与本公众号发布,欢迎大家star与转发,收藏!
公众号guangcity
2019/09/20
1.6K0
开刷Cs20之Tensorflow第二弹
[Tensorflow] TensorFlow之Hello World!(2)
TensorFlow入门的第一篇和大家聊了?graph图,op操作,node节点。对TensorFlow有了一个简单的认识,今天主要和大家分享的是TensorFlow中constant 常量, Variable变量,Placeholder占位符,Session启动图,fetches,feed等几个基本概念。 接下来我们通过一些简单的栗子分别来学习一下他们都是什么鬼。 # constant # 导入模块 import tensorflow as tf """ 怎么定义常量,常量的意思和我们平时理解的常量是一
用户1622570
2018/04/11
9830
从框架优缺点说起,这是一份TensorFlow入门极简教程
机器之心编译 参与:张倩、刘晓坤 随着 TensorFlow 在研究及产品中的应用日益广泛,很多开发者及研究者都希望能深入学习这一深度学习框架。而在昨天机器之心发起的框架投票中,2144 位参与者中有 1441 位都在使用 TensorFlow 框架,是所有框架中使用率最高的。但 TensorFlow 这种静态计算图有一定的学习成本,因此也阻挡了很多准备入坑的初学者。本文介绍了学习 TensorFlow 的系列教程,旨在通过简单的理论与实践帮助初学者一步步掌握 TensorFlow 的编程
机器之心
2018/06/12
9530
01 TensorFlow入门(1)
文章主要讲述了如何利用TensorFlow进行深度学习,包括模型的搭建、训练、保存以及部署。同时,文章还介绍了如何使用TensorFlow进行图像分类和文本情感分析等具体应用。
MachineLP
2018/01/09
1.6K0
01 TensorFlow入门(1)
简明机器学习教程(二)——实践:进入Tensorflow世界
经过了一年的休整,终于博客也要恢复原先坑着的系列了,《简明机器学习教程》也会恢复更新。说实在的,第二篇的原稿我其实在第一篇之后一星期就写出来了,但是后来因为原稿遗失与学业繁忙就一直拖了下来。历经一年,我对机器学习与这系列教程又有了些新的思考,所以我决定做出些许调整。首先,本系列不再单独分理论、实践篇,而是采用交织在一起的形式。其次,将matlab更换为tensorflow(python)。教程的定位依旧是面向初学者,所以会加入大篇幅的前置介绍。这篇就是为了之后内容而对tensorflow进行先行的介绍。
KAAAsS
2022/01/14
9380
简明机器学习教程(二)——实践:进入Tensorflow世界
深度学习_1_Tensorflow_1
# 深度学习 # 图像识别,自然语言处理 # 机器学习 深度学习 # 分类:神经网络(简单) 神经网络(深度) # 回归 图像:卷积神经网络 # 自然语言处理:循环神经网络 # cpu:运行操作系统,处理业务,计算能力不是特别突出 # gpu:专门为计算设计的 import tensorflow as tf a = tf.constant(5.0) b = tf.
Dean0731
2020/05/08
5350
tensorflow(一)windows 10 64位安装tensorflow1.4与基本概念解读tf.global_variables_initializer
一.安装 目前用了tensorflow、deeplearning4j两个深度学习框架, tensorflow 之前一直支持到python 3.5,目前以更新到3.6,故安装最新版体验使用。 慢
学到老
2018/03/19
9090
tensorflow(一)windows 10 64位安装tensorflow1.4与基本概念解读tf.global_variables_initializer
推荐阅读
相关推荐
TensorFlow基础知识
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文