前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Tensorflow] TensorFlow之Hello World!(2)

[Tensorflow] TensorFlow之Hello World!(2)

作者头像
用户1622570
发布2018-04-11 15:43:38
9280
发布2018-04-11 15:43:38
举报

TensorFlow入门的第一篇和大家聊了?graph图,op操作,node节点。对TensorFlow有了一个简单的认识,今天主要和大家分享的是TensorFlow中constant 常量, Variable变量,Placeholder占位符,Session启动图,fetches,feed等几个基本概念。

接下来我们通过一些简单的栗子分别来学习一下他们都是什么鬼。

# constant

# 导入模块

import tensorflow as tf

"""

怎么定义常量,常量的意思和我们平时理解的常量是一个意思,就是说它是固定的。 创建一个常量的函数是:

tf.constant(value, dtype=None, shape=None, name='Const', verify_shape=False)

其中除了value必须给以外,其他参数都是可选参数。

value:value的值必须为dtype类型,

shape: valued的形状,就是维度的意思

name:value的名字

verify_shape: 布尔值,True 或者False,是不是让tf来验证所给的value是不是shape辣么大的。

"""

# 接下来我们用函数constant建立几个常量

>>> constant_1 = tf.constant(3.0)

>>> print(constant_1)

Tensor("Const:0", shape=(), dtype=float32)

# 打印一下constant_1的类型,它是tf的Tensor类,张量!!!所以常量也叫张量常量。

>>> print(type(constant_1))

<class 'tensorflow.python.framework.ops.Tensor'>

>>> import numpy as np

>>> constant_2 = tf.constant(np.ones(5),dtype=tf.float32)

>>> constant_2

<tf.Tensor 'Const_1:0' shape=(5,) dtype=float32>

"""

接下来我们导入numpy模块,然后再定义几个常量,

"""

>>> import numpy as np

>>> np_array = np.array(range(15)).reshape(3,5)

# convert_to_tensor() 可以把numpy数组转化为tensor张量。

>>> tf_array = tf.convert_to_tensor(np_array)

>>> constant_3 = tf.constant(tf_array,dtype=tf.float32,shape=(3,5),name="constant_3")

# 然后我们用dir函数(很有用)看下constant_3都有那些方法,并且看看这些方法会输出什么。

>>> dir(constant_3)

['consumers',

'device',

'dtype',

'eval',

'get_shape',

'graph',

'name',

'op',

'set_shape',

'shape',

'value_index']

"""

按照顺序,consumers的意思是消费者,加s表示复数,意思就是说可以有很 个消费者。 那这里是什么意思呢?我们看到当我们调用consumers方法时, 返回值为一个空列表。而consumers的意思在整个程序中,使用constant_3的操作列表。当前无操作,所以返回值为空。

"""

>>> constant_3.consumers()

[]

"""

device比较好理解,设备的意思,意思是constant_3在哪个设备中使用, 还记得AlexNet吗?它使用了两个GPU。device就可以查看当前值在哪个GPU中使用。

"""

>>> constant_3.device

''

# dtype,数据类型,32位的浮点数。

>>> constant_3.dtype

tf.float32

>>>

"""

bound method 的意思是?直接理解不太好理解,我们换个套路, constant_3是constant类的一个实例,而eval是constant_3的一个方法, 这个方法是作用在一个类的实例上的,所以就叫做bound method

"""

>>> constant_3.eval

<bound method Tensor.eval of <tf.Tensor 'constant_3:0' shape=(3, 5) dtype=float32>>

# 当我们试图调用函数的时候,它报错了,这是为什么?因为 No default session is registered。因为我们还没有定义Session。

>>> constant_3.eval()

Traceback (most recent call last):

File "<pyshell#49>", line 1, in <module>

constant_3.eval()

File "C:\Python35\lib\site-packages\tensorflow\python\framework\ops.py", line 581, in eval

return _eval_using_default_session(self, feed_dict, self.graph, session)

File "C:\Python35\lib\site-packages\tensorflow\python\framework\ops.py", line 3783, in _eval_using_default_session

raise ValueError("Cannot evaluate tensor using `eval()`: No default "

ValueError: Cannot evaluate tensor using `eval()`: No default session is registered. Use `with sess.as_default()` or pass an explicit session to `eval(session=sess)`

# 形状,大小。

>>> constant_3.get_shape()

TensorShape([Dimension(3), Dimension(5)])

# grapg是查看定义的图的函数,

>>> constant_3.graph

<tensorflow.python.framework.ops.Graph object at 0x0000021C8EF67A20>

# 名字,和我们定义的时候是一样的,constant_3,冒号0,表示这是第0个常量。

>>> constant_3.name

'constant_3:0'

# op,操作。

>>> constant_3.op

<tf.Operation 'constant_3' type=Const>

# value_index值索引。当前为第0个。

>>> constant_3.value_index

0

# tf中除了constant以外,有没有其他函数可以定义常量张量呢?

# 主要有:

"""

tf.zeros

tf.zeros_like

tf.ones

tf.ones_like

tf.fill

"""

# 这个留给大家自己去试试,玩的愉快哦!

# Variable

"""

When you train a model, you use variables to hold and update parameters.

Variables are in-memory buffers containing tensors. They must be explicitly

initialized and can be saved to disk during and after training. You can later

restore saved values to exercise or analyze the model.( tensorflow doc)

"""

"""

什么是变量呢,tf文档中这样解释,当你训练一个模型的时候,你可以用Variable来hold存储和update更新参数

Variable可以包含张量,in-memory buffers?暂时可以不用管,因为我们定义变量的时候,这些变量还没用,因为模型没有训练,可以理解为缓存。Variable是需要被初始化,并且在训练过程中可以保存到磁盘,并且变量是可以回收的。如果理解不了,不要紧,后面看一个完整的栗子,就明白了。

"""

>>> Variable_1 = tf.Variable(tf.random_normal([3, 4], stddev=0.01),name="Variable_1")

>>> print(type(Variable_1))

<class 'tensorflow.python.ops.variables.Variable'>

# Variable_1的数据类型是Variable。

>>> Variable_2 = tf.Variable(tf.zeros([4]), name="Variable_2")

# 然后大家可以按照constant中我们提到的方法去探索一下Variable有哪些新奇的东西。

# Placeholder

# Placeholder 的意思是占位符。它是个占位子的符号。占位子,

# 很好理解,每个人都帮被人占过位子吧,想一下占位子的过程,

# 你先占这,等你的伙伴来了以后,你就让给他去坐。

# Placeholder也一样,他为后面真实数据的输入占位子,后面数据

# 来了以后,他的位子就让给我们模型需要输入的数据。

# placeholder的第一个参数表示数据类型,第二个参数表示shape。第三个是name。

placeholder(dtype, shape=None, name=None)

>>> placeholder_1 = tf.placeholder(tf.float32, [3,4],name="placeholder_1")

>>> type(placeholder_1)

<class 'tensorflow.python.framework.ops.Tensor'>

# 可以看到placeholder也是张量。所以他的方法和常量基本是相同的。

>>> placeholder_1.get_shape().as_list()

[3, 4]

# Session

"""

A Session object encapsulates the environment in which Operation

objects are executed, and Tensor objects are evaluated

"""

"""

一个Session对象包括了环境中的被执行的操作op,以及需要计算的张量。

我们知道tf的设计是基于图计算的。这样就需要一个入口,来执行之前定义的一系列的变量和操作op。

Session的作用就是提供这样一个入口。一般定义Session有两种方法。

1. session = tf.InteractiveSession()

这样定义一般是在Ipython中交互式使用,一次定义,可以多次使用。

这里提到Ipython,多说一句,Ipython是一个很好用的工具,安装直接用pip这可以,建议大家去学习,使用。

2. 使用with语句,

with tf.Session() as session:

[接下来就是一系列操作]

第二种方法和第一种的区别在意这样定义的session使用完之后,就自动关闭了。不需要我们再次关闭,缺点是只能调用一次。

"""

# session.run()

函数定义:

run(fetches, feed_dict=None, options=None, run_metadata=None)

# Runs operations and evaluates tensors in fetches.(tensorflow -doc)

# 当我们定义好op和node之后,我们通过定义Session来启动计算图。

# 而run方法可以计算我们启动好的图模型。run的对象必须在fetches里面。

# fetches 可以为计算图中的一个元素,也可以为多个元素,如果是多个元素的话,一般用列表表示。

# feed_dict是和fetches相对应的值,一般在深度学习中,我们会把数据作为feed。feed的类型为python字典。

>>> a = tf.constant(3)

>>> b = tf.constant(4)

>>> print(a+b)

Tensor("add_1:0", shape=(), dtype=int32)

# 这里定义两个常量a,b,我们想计算一下a+b的值,发现直接打印并没有输出7。

# 那怎么能输出7呢,在tf中,所有的tensor都需要run以后才能得到具体的值。

>>> sess = tf.InteractiveSession()

>>> print(sess.run(a+b))

7

# 这样我们就得到了7,run的第一个参数a+b,就是fetches。

# 接下来我们定义两个placeholder,然后定义一个乘法tf.multiply(),计算两个数的积。

>>> input_1 = tf.placeholder(tf.float32, name="input_1")

>>> input_2 = tf.placeholder(tf.float32, name="input_2")

>>> results = tf.multiply(input_1, input_2)

>>> with tf.Session() as session:

# 初始化

session.run(tf.global_variables_initializer())

# 计算5.0 * 6.0 = 30.0

print(session.run(results, feed_dict={input_1:[5.0], input_2:[6.0]}))

好,tf入坑系列就到这里了,后面会有更多关于tf的坑点带给大家,祝大家玩的开心!

[参考文献]

1. https://www.tensorflow.org/

2. https://blog.altoros.com/basic-concepts-and-manipulations-with-tensorflow.html

3.https://cs224d.stanford.edu/lectures/CS224d-Lecture7.pdf

本文为作者原创,如有雷同,必然是别人抄我的。

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

本文分享自 机器学习和数学 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
灰盒安全测试
腾讯知识图谱(Tencent Knowledge Graph,TKG)是一个集成图数据库、图计算引擎和图可视化分析的一站式平台。支持抽取和融合异构数据,支持千亿级节点关系的存储和计算,支持规则匹配、机器学习、图嵌入等图数据挖掘算法,拥有丰富的图数据渲染和展现的可视化方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档