[TensorFlow学习笔记1]TensorFLow的基本概念和基本使用

本文介绍了TensorFlow的基础概念,包括图(graph)、会话(session)、张量(tensor)、变量及常量等。详细解释了如何使用TensorFlow进行计算图的构建和运行,包括feed和fetch的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里先给出参考链接:

https://github.com/jikexueyuanwiki/tensorflow-zh/blob/master/SOURCE/get_started/basic_usage.md

blog.youkuaiyun.com/yhl_leo/article/details/50619029

www.tuicool.com/articles/aqAZviu

使用TensorFlow,你必须明白TensorFlow

  • 使用图(graph)来表示任务
  • 被称之为会话(Session)的上下文(context)中执行图
  • 使用tensor表示数据
  • 通过变量(Variable)维护状态
  • 使用feedfetch可以为任意操作(arbitrary operation)赋值或者从其中获取数据

1.TensorFLow图(graph)的概念:

Data Flow Graph: 使用有向图的节点和边共同描述数学计算。graph中的nodes代表数学操作,也可以表示数据输入输出的端点。边表示节点之间的关系,传递操作之间互相使用的多位数组(tensors,张量),tensor在graph中流动——这也就是TensorFlow名字的由来。一旦节点相连的边传来了数据流,节点就被分配到计算设备上异步的(节点间)、并行的(节点内)执行。参见上图。


请注意,tensoFlow是可以存在多张图的,但是默认情况下使用的是一张默认图,TensorFlow的op构造器可以为默认图添加结点。多图管理详见:

https://github.com/jikexueyuanwiki/tensorflow-zh/blob/master/SOURCE/api_docs/python/framework.md#Graph

op构造器形式如下:

# 构造器的返回值代表该常量 op 的返回值.
matrix1 = tf.constant([[3., 3.]])
# 创建另外一个常量 op, 产生一个 2x1 矩阵.
matrix2 = tf.constant([[2.],[2.]])
product = tf.matmul(matrix1, matrix2)

这里的product是矩阵乘运算结点。


2.会话session

session是graph的运行环境。启动默认图的方法是:

# 启动默认图.
sess = tf.Session()
如果想启动其他的图,需要在Session中填写相应的参数。

对于graph,如果我们想取回某个操作的结果,只需要使用:

result = sess.run(product)
print result
# 任务完成, 关闭会话.
sess.close()
这里的代码片是承接上文的。

sess.close()是用于释放资源的。当然,如果不想写sess.close(),也可以写成如下形式:

with tf.Session() as sess:
  result = sess.run([product])
  print result


3.tensor变量

Tensorflow使用tensor数据结构来代表所有的数据,计算图中,操作间传递数据都是tensor。你可以把Tensorflowtensor看做是一个n维的数组或列表。一个tensor包含一个静态类型rank和一个shape

Tensorflow系统中,张量的维数被描述为阶。但是张量的阶和矩阵的阶并不是同一个概念。张量的阶是张量维数的一个数量描述,下面的张量(使用python中list定义的)就是2阶:

t = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

你可以认为一个二阶张量就是我们平常所说的矩阵,一阶张量可以认为是一个向量。对于一个二阶张量,你可以使用语句t[i, j]来访问其中的任何元素。而对于三阶张量你可以通过t[i, j, k]来访问任何元素:

数学实例python例子
0纯量(只有大小)s=483
1向量(大小和方向)v=[1.1, 2.2, 3.3]
2矩阵(数据表)m=[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
33阶张量t=[[[2], [4], [6]], [[8], [9], [10]], [[11], [12], [13]]]
nn

形状
Tensorflow文档中使用了三种记号来方便地描述张量的维度:阶,形状以及维数。以下展示了它们之间的关系:
形状维数实例
0[]0-D一个0维张量,一个纯量
1[D0]1-D一个1维张量的形式[5]
2[D0, D1]2-D一个2维张量的形式[3, 4]
3[D0, D1, D2]3-D一个3维张量的形式[1, 4, 3]
n[D0, D1, ... Dn]n-D一个n维张量的形式[D0, D1, ..., Dn]
数据类型

除了维度,tensor有一个数据类型属性。你可以为一个张量指定下列数据类型中的任意一个类型:

数据类型python类型描述
DT_FLOATtf.float3232位浮点数
DT_DOUBLEtf.float6464位浮点数
DT_INT64tf.int6464位有符号整型
DT_INT32tf.int3232位有符号整型
DF_INT16tf.int1616位有符号整型
DT_INT8tf.int88位有符号整型
DT_UINT8tf.uint88位无符号整型
DT_STRINGtf.string可变长度的字节数组,每一个张量元素都是一个字节数组
DT_BOOLtf.bool布尔型
DT_COMPLEX64tf.complex64由32位浮点数组成的负数:实数和虚数
DT_QINT32tf.qint32用于量化Ops的32位有符号整型
DT_QINT8tf.qint8用于量化Ops的8位有符号整型
DT_QUINT8tf.quint8用于量化Ops的8位无符号整型

tensor可以被声明为变量或常量。变量可以维护图运行过程中的状态信息,并且可以取回值。变量和常量的形式如下:

x = tf.Variable([1.0, 2.0])
a = tf.constant([3.0, 3.0])

取回变量或常量的值可以用:

res = sess.run(x) #or a

在tensorflow中,变量需要在被送入图中运行之前进行初始化,而常量不用。

初始化方法有单一初始化和全部初始化,分别如下:

# 使用初始化器 initializer op 的 run() 方法初始化 'x' 
x.initializer.run()
#初始化默认图中的所有变量
init_op = tf.initialize_all_variables()

4.fetch和feed


Fetch

为了取回操作的输出内容, 可以在使用 Session 对象的 run() 调用 执行图时, 传入一些 tensor,这些 tensor 会帮助你取回结果. 在之前的例子里, 我们只取回了单个节点 state, 但是你也可以取回多个tensor:

input1 = tf.constant(3.0)
input2 = tf.constant(2.0)
input3 = tf.constant(5.0)
intermed = tf.add(input2, input3)
mul = tf.mul(input1, intermed)

with tf.Session() as sess:
  result = sess.run([mul, intermed])
  print result

# 输出:
# [array([ 21.], dtype=float32), array([ 7.], dtype=float32)]


Feed

上述示例在计算图中引入了 tensor, 以常量或变量的形式存储. TensorFlow 还提供了 feed 机制, 该机制可以临时替代图中的任意操作中的 tensor 可以对图中任何操作提交补丁, 直接插入一个 tensor.

feed 使用一个 tensor 值临时替换一个操作的输出结果. 你可以提供 feed 数据作为 run() 调用的参数.feed 只在调用它的方法内有效, 方法结束, feed 就会消失. 最常见的用例是将某些特殊的操作指定为 "feed" 操作,标记的方法是使用 tf.placeholder() 为这些操作创建占位符.

input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
output = tf.mul(input1, input2)

with tf.Session() as sess:
  print sess.run([output], feed_dict={input1:[7.], input2:[2.]})

# 输出:
# [array([ 14.], dtype=float32)]

for a larger-scale example of feeds.如果没有正确提供 feed, placeholder() 操作将会产生错误.MNIST 全连通 feed 教程(source code)给出了一个更大规模的使用 feed 的例子.





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值