tensorflow学习二
来源:互联网 发布:移动数据被禁用怎么开 编辑:程序博客网 时间:2024/06/15 07:46
Tensorflow的基本使用
使用图(graph)来表示计算任务;
在被称之为会话(Session)的上下文(context)中执行图;
使用tensor表示数据;
通过t变量(Variable)维护状态;
使用feed和fetch可以为任意的操作(arbitrary operation)赋值或者从其中获取数据。
综述:
TensorFlow是一个编程系统,使用图来表示计算任务。图中的节点被称之为op(operation的缩写)。一个op获取0个或多个Tensor,执行计算,产生0个或多个Tensor。每个Tensor是一个类型的多维数组。例如,可以将一个小组图像集表示为一个四维浮点数数组,这四个维度分别是[batch,height,width,channels]。
一个TensorFlow图描述了计算的过程。为了进行计算,图必须在会话里被启动。会话将图的op分发到CPU或GPU之类的设备上,同时提供执行op的方法。这些方法执行后,将产生的tensor返回。
计算图:TensorFlow程序通常被组织成一个构建阶段和一个执行阶段。在构建阶段,op的执行步骤被描述成一个图。在执行阶段,使用会话执行图中的op。例如,通常在构建阶段创建一个图来表示和训练神经网络,然后在执行阶段反复执行图中的训练op。
构建图:构件图的第一步,是创建op(source op)。源op不需要任何输入,例如常量(Constant)。源op的输出被传递给其他op做运算。Python库中,op构造器的返回值代表被构造出的op的输出,这些返回值可以传递给其他op构造器作为输入。TensorFlow Python库有一个默认(default graph),op构造器可以为其增加节点。这个默认图对许多程序来说已经够用了。
import tensorflow as tf
#创建一个常量op,产生一个1*2矩阵,这个op被作为一个节点
#加载默认图中
#构造器的返回值代表该常量op的返回值
matrix1=tf.constant([[3,3]])
#创建另外一个常量op,产生一2*1矩阵
matrix2=tf.constant([[2],[2]])
#创建一个矩阵乘法matmul op,把matrix1和matrix2作为输入
#返回值product代表矩阵乘法的结果
product=tf.matmul(matrix1,matrix2)
默认图现在有三个节点,两个constant() op,和matmul() op。为了真正进行矩阵相乘运算,并得到矩阵乘法的结果,必须在会话里启动这个图。
在一个会话中启动图:构造阶段完成后,才能启动图。启动图的第一步是创建一个Session对象,如果无任何创建参数,会话构造器将启动默认图。传入product作为该方法的参数
#启动默认图
sess=tf.Session()
#调用sess的run()方法来执行矩阵乘法op,传入product作为该方法的参数
result=sess.run(product)
print(result)
sess.close()
# with tf.Session() as sess:
# result=sess.run(product)
# print(result)
在实现上,TensorFlow将图形定义转换成分布是执行的操作,以充分利用可用的计算资源(如CPU或GPU)。一般不需要显示指定使用CPU还是GPU,TensorFlow能自动检测。如果检测GPU,TensorFlow会尽可能地利用找到的第一个GPU来执行操作。如果机器上有超过一个可用的GPU,除第一个外的其他GPU默认是不参与计算的。为了让TensorFlow使用这些GPU,你必须将op明确指派给它们执行。with...Device语句用来指派特定的CPU或GPU执行操作:
with tf.Session() as sess:
with tf.device('/gpu:1'):
...
Tensor:TensorFlow程序使用tensor数据结构来代表所有的数据,计算图中,操作间传递的数据都是tensor。可以把TensorFlow tensor看作一个n维的数组或列表。一个tensor包含一个静态rank,和一个shape。
变量:变量维护图执行过程中的状态信息
#创建一个变量,初始化为标量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)
#启动图后,变量必须先经过初始化(init)op初始化
#首先必须增加一个初始化op到图中
init_op=tf.initialize_all_variables()
#启动图,运行op
with tf.Session() as sess:
#运行init op
sess.run(init_op)
#打印state的初始值
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会会帮助你取回结果。
input1=tf.constant(3)
input2=tf.constant(2)
input3=tf.constant(5)
intermed=tf.add(input2,input3)
mul=tf.multiply(input1,intermed)
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()为这些操作创建占位符。
input4=tf.placeholder(tf.float32)
input5=tf.placeholder(tf.float32)
output=tf.multiply(input4, input5)
with tf.Session() as sess:
print(sess.run([output],feed_dict={input4:[7],input5:[2]}))
- tensorflow(二)学习记录
- Tensorflow C++学习(二)
- tensorflow学习(二)
- tensorflow学习二
- tensorflow学习笔记(二十一):tensorflow可视化
- TensorFlow学习笔记(二):TensorFlow入门
- Tensorflow学习系列(二): tensorflow基础
- Tensorflow实战学习(二)【怎么安装TensorFlow】
- TensorFlow学习笔记(二)
- tensorflow教程学习二MNIST
- TensorFlow学习笔记(二):变量
- TensorFlow学习笔记(二)
- TensorFlow学习笔记(二)
- Tensorflow学习与应用二
- TensorFlow学习笔记(二十一) tensorflow机器学习模型
- TensorFlow学习二:MNIST机器学习入门
- tensorflow学习笔记(二):windows10_64 tensorflow-gpu cuda
- TensorFlow学习笔记(二):TensorFlow实现线性回归模型
- 简单计算器
- POJ 2001 Shortest Prefixes
- Java并发编程:如何创建线程?
- Android Service生命周期,本地服务远程服务,前台服务后台服务,启动方式,与IntentService区别全面解析
- eclipse中jd反编译安装
- tensorflow学习二
- Linux指令合集
- PCA的理论基础
- CSS_视频播放
- MySQL与Java基础部分学习体会
- 高并发网站原理
- UVALive 7267Mysterious Antiques in Sackler Museum (判断长方形)
- matlab2014a安装密钥
- Android Studio JNI关联C头文件源码