Tensorflow初入门
Posted fromzore
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tensorflow初入门相关的知识,希望对你有一定的参考价值。
想要使用Tensorflow必须先要安装上这个,我用的是win10系统,之前也装了python环境
所以我就直接使用pip install tensorflow命令安装上就可以使用了。
想要使用tensorflow,就必须明白tensorflow:
1、使用图(graph)来表示计算任务。
2、在被称之为为会话(session)的上下文(context)中执行图。
3、使用tensor表示数据。
4、通过变量(Variable)维护状态。
5、使用feed和fetch可以为任意的操作赋值或者从其中获取数据。
tensorflow是一个编程系统,使用图来表示计算任务。途中的节点被称为op。一个op获得0个或多个tensor,执行计算,产生0个或多个tensor。每个tensor是一个类型化的多为数组。一个tensorflow图描述了计算的过程,为了进行计算,图必须在会话里被启动。会话将图的op分发到诸如cpu或gpu之类的设备上,同时提供执行op的方法。这些方法执行后,将产生的tensor返回。在Python中,返回的是numpy ndarray对象。
tensorflow程序通常被组织成一个构建和一个执行阶段。在构建阶段,op的执行步骤被描述成一个图。在执行阶段,使用会话执行执行图中的op。例如,通常在构建阶段创建一个图来表示和训练神经网络,然后在执行阶段反复执行图中的训练op。
构建图
tensorflow python库有一个默认图,op构造器可以为其增加节点。
下面我们来构建一个图,并执行它
import tensorflow as tf #建立computational graph node1=tf.constant(3.,tf.float32) node2=tf.constant(4.5) tensor=tf.add(node1,node2) print(node1) print(node2) #执行computational graph session=tf.Session() print(session.run(node1)) print(session.run(node2)) print(session.run(tensor))
session.close()
运行结果是这样的
由此可见我们创建node1与node2其实是创建了两个tensor结点,Session对象在使用完之后需要关闭以释放资源。除了显式的条用close外,也可以使用“with”代码块来自动完成关闭工作。
with tf.Session() as session: result=session.run(node1) print(redult)
在实现上,tensorflow将图形定义转换成分布式执行的操作,以充分利用可用的计算机资源。
交互式使用
文档中的Python示例使用一个会话Session来启动图,并调用Session.run()方法执行操作。为了便于使用注入IPython之类的Python交互环节,可以使用InteractiveSession代替Session类,使用Tensor.eval()和Operation.run()方法代替Session.run()。这样可以避免使用一个变量来持有会话。
#进入一个交互式Tensorflow会话 import tensorflow as tf sess=tf.InteractiveSession() x=tf.Variable([1.0,2.0]) a=tf.constant([3.0,3.0]) #使用Operation.run()方法初始化x x.initializer.run() #增加一个剪发op,从x减去a,运行减法结果,减去输出结果 sub=tf.sub(x,a) print(sub.eval())
Tensor
tensorflow程序使用tensor数据结构来代表所有的数据,计算图中,操作间传递的数据都是tensor。你可以把tensorflow tensor看作是一个n维的数组或者列表。一个tensor包含一个静态类型rank,和一个shape。
变量
Variables变量维护图执行过程中的状态信息。下面的例子演示了如何使用变量实现一个简单的计数器。
import tensorflow as tf #创建一个变量,初始化维标量0 state=tf.Variable(0,name="counter") #创建一个op,其作用是使state增加1 one=tf.constant(1) new_value=tf.add(state,one) update=tf.assign(state,new_value) #启动图后变量不需经过初始化 #首先必须增加一个初始化‘op’到图中 init_op=tf.initialize_all_variables() 启动图,运行op with tf.Session() as sess: sess.run(init_op) print(sess.run(state)) for _ in range(3): sess.run(update) print(sess.run(state))
运行结果如下
代码中的assign()操作是图所描绘的表达式的一部分,正如add()操作一样,所以在调用run()执行表达式之前,不会进行真正执行的赋值操作。
我们通常会将一个统计模型中的参数表示为一组变量。例如,你可以将一个神经网络的权重作为某个变量存储在一个tensor中。在训练过程中,通过重复运行训练图,更新这个tensor。
Fetch
为了取回操作的输出内容,可以在使用Session对象的run()调用执行图时,传入一些tensor,这些tensor会帮助你取回结果。在之前我们只取回了单个节点state,但是你也可以取回多个tensor:
import tensorflow as tf input1=tf.constant(3.0) input2=tf.constant(2.0) input3=tf.constant(5.0) intermed=tf.add(input2,input3) mul=tf.multiply(input1,intermed)#multiply(),两个数相乘 with tf.Session() as sess: result=sess.run([mul,intermed]) print(result)
输出结果如下
需要获取多个tensor值,在op的依次运行中一起获得(而不是之歌去获取tensor)。也就是我们可以将两个节点和在一块输出。
feed
上述示例在计算图中引入了tensor,以常量或者变量的形式存储。Tensorflow还提供了feed机制,该机制可以临时替代图中的任意操作中的tensor可以对图中任何操作提交补丁,直接插入一个tensor。
feed使用一个tensor值临时,替换一个操作的输出结果。你可以提供feed数据作为run()调用的参数。feed旨在调用它的方法内有效,方法结束,feed就会小时。最常见的用例是将某些特殊的操作指定为“feed”操作,标记的方法是使用tf.placeholder()为这些操作创建占位符。
import tensorflow as tf input1=tf.placeholder(tf.float32) input2=tf.placeholder(tf.float32) output=tf.multiply(input1,input2) with tf.Session() as sess: print(sess.run([output],feed_dict={input1:[7.],input2:[2.]}))
输出的结果是这样的
以上是关于Tensorflow初入门的主要内容,如果未能解决你的问题,请参考以下文章
TensorFlow.org教程笔记 DataSets 快速入门
Tensorflow框架初尝试————搭建卷积神经网络做MNIST问题